数组partition调整使数组的左部分单调有序
2022
8/23
11:12
给定一个有序数组arr,调整使得数组的左部分无重复元素且有序,右边部分不要求。
例如:数组arr[]={1,2,2,2,3,3,4,5,6,9,9}
调整过后可以为:[1, 2, 3, 4, 5, 6, 9, 2, 3, 2, 9]
解题思路:
定义快慢指针,慢指针指向数组左侧单调排序最后一个位置,而快指针不断地向右侧偏移,如果慢指针指向数字与快指针指向数字不相等,则慢指针向右移动一位,并且互换快慢指针所指向的数据。
代码实现:
public class Solution_107 {
public void noRepeat(int[] arr) {
if (arr == null || arr.length <= 1) return;
int left = 0, right = 1;
while (right < arr.length) {
if (arr[left] != arr[right]) {
left++;
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
}
right++;
}
}
public static void main(String[] args) {
Solution_107 solution_107 = new Solution_107();
int[] nums = new int[]{1, 2, 2, 2, 3, 3, 4, 5, 6, 9, 9};
solution_107.noRepeat(nums);
System.out.println(Arrays.toString(nums));
}
}
感谢您使用伴职平台,如有侵权,请投诉删除!

