🌕 26. 删除有序数组中的重复项

吞佛童子2022年6月9日
  • algorithm
  • array
小于 1 分钟

🌕 26. 删除有序数组中的重复项

难度: 🌕

问题描述

img_13.png


解法

class Solution {
    public int removeDuplicates(int[] nums) {
        // 思路:
        // 快慢指针
        // 画图理解
        int len = nums.length;
        // 特殊情况特判
        if(len <= 1) {
            return len;
        }
        // len >= 2
        int left = 0;
        int right = 1;
        while(right < len) {
            // 找到符合条件的 right 下标
            while(right < len && nums[right] <= nums[left]) {
                right ++;
            }
            if(right >= len) {
                break;
            }
            // 和 left 的下一个元素进行交换
            if(left + 1 != right) {
                swap(nums, left + 1, right);
            }
            left ++;
            right ++;
        }
        return left + 1;
    }

    private void swap(int[] nums, int left, int right) {
        int tmp = nums[left];
        nums[left] = nums[right];
        nums[right] = tmp;
    }
}

输出

img_12.png

上次编辑于: 2022/6/20 下午8:24:47
贡献者: liuxianzhishou