力扣704
执行用时:28 ms, 在所有 C++ 提交中击败了81.82%的用户
内存消耗:26.8 MB, 在所有 C++ 提交中击败了82.92%的用户
经典二分查找,不过把边界也进行了判断
int search(vector<int>& nums, int target) {
int left = 0;
int right = nums.size() -1 ;
int mid = (left + right) / 2;
if(nums.size() == 1 && nums[0] == target)
{
return 0;
}
else if (nums.size() == 1 && nums[0] != target)
{
return -1;
}
while(right > left)
{
if(nums[mid] == target) //判断
{
return mid;
}
else if(nums[left] == target)
{
return left;
}
else if(nums[right] == target)
{
return right;
}
if(right == left+1)
{
return -1;
}
if(nums[mid] > target)
{
right = mid;
mid = (left + right) / 2;
}
else if(nums[mid] < target)
{
left = mid;
mid = (left + right) / 2;
}
}
return -1;
}
力扣27
执行用时:4 ms, 在所有 C++ 提交中击败了45.80%的用户
内存消耗:8.5 MB, 在所有 C++ 提交中击败了46.99%的用户
思路双指针用法
int removeElement(vector<int>& nums, int val) {
int left = 0;
int right = nums.size()-1;
while(left<right)
{
if(nums[right] == val)
{
right--;
continue;
}
if(nums[left] == val)
{
int temp = nums[right];
nums[right] = nums[left];
nums[left] = temp;
right--;
}
left++;
}
while(nums.size() != 0 &&nums.back() == val )
{
nums.pop_back();
}
return nums.size();
}