leetcode做题记录0026
程序员文章站
2022-04-15 11:35:50
...
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;
}
}