給定一個(gè)排序數(shù)組说榆,你需要在原地刪除重復(fù)出現(xiàn)的元素,使得每個(gè)元素只出現(xiàn)一次寸认,返回移除后數(shù)組的新長(zhǎng)度签财。
不要使用額外的數(shù)組空間,你必須在原地修改輸入數(shù)組并在使用 O(1) 額外空間的條件下完成废麻。
AC代碼
class Solution {
public int removeDuplicates(int[] nums) {
if(nums == null || nums.length == 0) {
return 0;
}
if(nums.length == 1) {
return 1;
}
int cur = nums[0];
int step = 0;
int ans = 1;
// int len = nums.length;
for(int i = 1; i < nums.length; i++) {
//計(jì)數(shù)
if(nums[i] == cur) {
step++;
// len--;
continue;
}
ans++;
cur = nums[i];
//移動(dòng)
for(int j = i; j < nums.length; j++) {
// nums[j - step] = nums[j];
for(int k = 1; k <= step; k++) {
nums[j - k] = nums[j];
}
}
i = i - step;
step = 0;
}
return ans;
}
}
比較笨的方法荠卷,效率不高
評(píng)論區(qū)大佬代碼,思路很好烛愧,用兩個(gè)指針油宜,一個(gè)指向當(dāng)前,另一個(gè)指向待定的怜姿,如果不相等則賦值
class Solution {
public int removeDuplicates(int[] nums) {
// 使用雙指針
if(nums==null || nums.length == 1){
return nums.length;
}
int i = 0,j =1;
while(j<nums.length){
if(nums[i]==nums[j]){
j++;
}else{
i++;
nums[i]=nums[j];
j++;
}
}
return i+1;
}
}