刷题记录3
26
看到什么样的题目第一想法是可以用双指针
这个题用暴力破解法处理边界处理了好几次,但是使用双指针一下就通过了
双指针
class Solution {
public int removeDuplicates(int[] nums) {
if(nums.length <= 1){
return nums.length;
}
int slowIndex = 0;
for(int i = 1,len = nums.length;i < len;i++){
if(nums[slowIndex] != nums[i]){
nums[++slowIndex] = nums[i];
}
}
return slowIndex + 1;
}
}
暴力破解
class Solution {
public int removeDuplicates(int[] nums) {
if(nums.length <= 0 ){
return 0;
}
int target = 0;
int len = nums.length;
// 设置i < len - 1 是为了最后一个判断时数组不会越界
for(int i = 0;i < len - 1;i++){
if(len - target < i + 2){
// i的最大值为 len - 2, 当 i + 2 大于len - target时说明了已经到了边界
break;
}
if(nums[i] == nums[i+1]){ //等于时提数
for(int j = i ; j < len - 1;j++){
nums[j] = nums[j+1];
}
i--; // 重新判断当前这个i 和移动以后新的 i + 1的值
target++;
}
}
return len - target;
}
}

浙公网安备 33010602011771号