这道题我用的是双指针法,left,right。通过while循环将目标元素全部放后面,left所代表下标就是剩余个数。但是最开始遇到了问题
点击查看代码
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int n=nums.size();
int left=0;int right=n-1;
while(left<=right){
if(nums[left]!=val){++left;}
if(nums[right]==val){--right;}
else if(nums[left]==val&&nums[right]!=val){
int temp=nums[left];
nums[left]=nums[right];
nums[right]=temp;
}
}
int count=n-left;
for(int i=0;i<count;i++){
nums.pop_back();
}
return left;
}
};
点击查看代码
while(left<=right){
if(nums[left]!=val){++left;}
if(nums[right]==val){--right;}
else if(nums[left]==val&&nums[right]!=val){
int temp=nums[left];
nums[left]=nums[right];
nums[right]=temp;
}
}
二分查找法,通过学习有了更加深刻体会。
点击查看代码
class Solution {
public:
int search(vector<int>& nums, int target) {
int n=nums.size();
int left=0;int right=n-1;
while(left<=right){
int mid=(left+right)/2;
if(nums[mid]<target){left=mid+1;}
if(nums[mid]>target){right=mid-1;}
if(nums[mid]==target){return mid;}
}
return -1;
}
};