刷题记录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;
    }
}
posted @ 2024-09-22 19:38  虚拟式  阅读(19)  评论(0)    收藏  举报