App下载 微信公众号

数组partition调整使数组的左部分单调有序

其他 /  作者【吾非言】/ 发布于2022-8-23/ 2.15k次浏览
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));
    }
}
感谢您使用伴职平台,如有侵权,请投诉删除!

全部评价

最新
查看更多评论 加载