欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

leetcode做题记录0026

程序员文章站 2022-04-15 11:35:50
...

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;
    }
}