27.移除元素
题目链接:. - 力扣(LeetCode)
题目讲解:代码随想录
题目思路:快指针遍历旧数组寻找新数组元素,慢指针负责指向每次更新数组的元素下标
时间复杂度O(n),空间复杂度O(1)。比暴力的两次循环少一次。
class Solution {
public int removeElement(int[] nums, int val) {
int slow = 0;
for(int fast = 0;fast < nums.length ; fast++){
if(nums[fast] != val){
nums[slow] = nums[fast];
slow++;
}
}
return slow;
}
}
26.删除有序数组中的重复项
题目链接:. - 力扣(LeetCode)
题目思路:双指针的slow指针就是用来存放新数组的下标,fast指针是用来遍历整个数组来找到目标元素的,通过这个基本的思维来发散。
class Solution {
public int removeDuplicates(int[] nums) {
int slow = 0;
for(int fast = 1;fast < nums.length;fast++){
if(nums[fast] != nums[slow]){
nums[slow + 1] = nums[fast];
slow++;
}
}
return slow+1;
}
}
283.移动零
题目链接:. - 力扣(LeetCode)
class Solution {
public void moveZeroes(int[] nums) {
int p = 0;
for(int q = 0;q < nums.length;q++){
if(nums[q] != 0){
nums[p] = nums[q];
p++;
}
}
for(int i = p; i < nums.length;i++){
nums[i] = 0;
}
}
}