Two Pointers(指针i扫旧, 指针start上新)模板:
*用指针start帮助生成新数组。指针start指向下一个即将生成的,符合条件的元素的位置。 // save a position for next valid item *用指针i扫给定数组A *若扫到的A[i]符合新数组对元素的要求,令A[start]=A[i]
Two Pointers(指针i扫旧, 指针start上新)高频题:
[leetcode]26. Remove Duplicates from Sorted Array有序数组去重(单个元素只出现一次)
class Solution {
public int removeDuplicates(int[] nums) {
if(nums.length == 0) return 0;
int start = 1;
for(int i = 1; i < nums.length; i++){
if(nums[i] != nums[start-1]){
nums[start] = nums[i];
start++;
}
}
return start;
}
}
[leetcode]80. Remove Duplicates from Sorted Array II有序数组去重(单个元素可出现两次)
class Solution {
public int removeDuplicates(int[] nums) {
// corner case
if(nums.length == 0 || nums == null) return 0;
int start = 2;
for(int i = 2; i < nums.length; i++){
if(nums[i] != nums[start-2]){
nums[start] = nums[i];
start++;
}
}
return start;
}
}
class Solution {
public void moveZeroes(int[] nums) {
int start = 0;
for(int i = 0; i < nums.length; i++){
if(nums[i] != 0){
nums[start] = nums[i];
start++;
}
}
for(int i = start; i< nums.length; i++){
nums[i] = 0;
}
}
}
[leetcode]27. Remove Element删除元素
class Solution {
public int removeElement(int[] nums, int val) {
if(nums.length == 0 || nums == null){return 0;}
int start = 0;
for(int i = 0; i < nums.length; i++){
if (nums[i] != val ){
nums[start] = nums[i];
start++;
}
}
return start;
}
}
浙公网安备 33010602011771号