二分查找
对数组的要求有两点:
- 有序
- 无重复元素,若有重复元素则返回的元素下标不唯一
while(left<=right)
代码其实是很好理解的
点击查看代码
class Solution {
public:
int search(vector<int>& nums, int target) {
int length = nums.size();
int left = 0;
int right = length-1;
int mid;
while(left<=right){
mid = (left +right)/2;
if(nums[mid]==target)
return mid;
else if(target<nums[mid]){
right = mid - 1;
}else{
left = mid +1;
}
}
return -1;
}
};
移除元素
这道题我的思路是暴力解法
- 先循环一遍,找到目标值的数量
- 从头开始再次循环,找到目标值后,进入二层循环,第二层循环从后往前,找到不是目标值的第一个值,两数交换
- 最后返回更新的数组长度
点击查看代码
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int count=0;
int length = nums.size();
for(int m=0;m<length;m++){
if(nums[m]==val){
count++;
}
}
for(int i=0;i<length-1;i++){
if(nums[i]==val){
for(int j=length-1;j>i;j--){
if(nums[j]==val)
continue;
else{
nums[i]=nums[j];
nums[j]=val;
break;
}
}
}
}
return length-count;
}
};