题目
解法
二分查找
说来惭愧,第一次做算法题,看到找数下意识用下面的方法,没看见二分查找的要求
class Solution {
public:
int search(vector<int>& nums, int target) {
int a =-1;
int c =-1;
for(auto b : nums)
{
if(b==target)
{
c =a+1;
}
a++;
}
return c;
}
};
正确的解法为:
class Solution {
public:
int search(vector<int>& nums, int target) {
int left = 0;
int right = nums.size();
while(left<right)
{
int middle = left + (right - left)/2;
if(nums[middle]>target)
{
right = middle -1;
}
else if(middle<target)
{
left = middle + 1;
}
else
{
return middle
}
}
return -1;
}
};
移除数据
看到这个题目同样下意识采用下面的办法
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
for (auto it = nums.begin(); it != nums.end();) {
if (*it == val) {
it = nums.erase(it);
} else {
++it;
}
}
return nums.size();
}
};
期间还因为for(auto b:nums)
的用法模糊,报错半天。
正确解法:
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int slowIndex = 0;
for(int fastIndex = 0; fastIndex < nums.size();fastIndex++)
{
if(nums[fastIndex]!=val)
{
nums[slowIndex++]=nums[fastIndex];
}
}
return slowIndex;
}
};