leetcode做题记录0026

leetcode 0026

说明

只是为了记录一下,不求多快,也不深究。

会简要描述思路,代码中不写注释。

如碰到不会做的用了别人代码会在博客中标出。

题目描述

在这里插入图片描述

思路

遍历了两遍,可能还有更好的办法吧。

第一遍把重复位置的数标记出来,我这里是将他们改成nums[0] - 1,并计数无重复个数count;

第二遍从最小的重复位置开始遍历到无重复总数count,按顺序交换重复位置的数和无重复位置的数。

class Solution {
    public int removeDuplicates(int[] nums) {
        int len = nums.length;
		if(len<2) {
			return len;
		}
		int count = 1;
		int smallIdx = -1;
		for(int idx = len - 1;idx > 0;idx--) {
			if(nums[idx] == nums[idx-1]) {
				nums[idx] = nums[0] - 1;
				smallIdx = idx;
			}else {
				count++;
			}
		}
		if(smallIdx == -1) {
			return len;
		}
		for(int i = smallIdx, j = smallIdx + 1;i < count && j < len;) {
			if(nums[i] != nums[0] - 1) {
				i++;
				continue;
			}
			if(nums[j] == nums[0] - 1) {
				j++;
				continue;
			}
			nums[i] = nums[j];
             nums[j] = nums[0] - 1;
			i++;
			j++;
		}
		return count;
    }
}
发布了77 篇原创文章 · 获赞 1 · 访问量 2071

猜你喜欢

转载自blog.csdn.net/Paul_1i/article/details/104508837