1 移除元素-力扣27(简单)
1.1 题目: 移除元素1
1.2 思路及解法
只能覆盖,不能删除
暴力遍历解法
class Solution {
public int removeElement(int[] nums, int val) {
int size=nums.length;
for(int i=0;i<size;i++){
if(nums[i]==val){
for(int j=i+1;j<size;j++){
nums[j-1]=nums[j];
}
i--;
size--;
}
}
return size;
}
}
双指针法
//相向双指针法
class Solution {
public int removeElement(int[] nums, int val) {
int left = 0;
int right = nums.length - 1;
while(right >= 0 && nums[right] == val) right--; //将right移到从右数第一个值不为val的位置
while(left <= right) {
if(nums[left] == val) { //left位置的元素需要移除
//将right位置的元素移到left(覆盖),right位置移除
nums[left] = nums[right];
right--;
}
left++;
while(right >= 0 && nums[right] == val) right--;
}
return left;
}
}
2 删除有序数组中的重复项-力扣27(简单)
2.1 力扣27题(简单)
2.2 思路及解法
(图片摘自力扣题解大佬Max)
class Solution {
public int removeDuplicates(int[] nums) {
if(nums.length==0 || nums==null){
return 0;
}
int low=0;
int fast=1;
while(fast<nums.length){
if(nums[low]!=nums[fast]){
nums[low+1]=nums[fast];
low++;
}
fast++;
}
return low+1;
}
}
未完待续。。。