Leetcode 704 二分查找
题目链接:二分查找
Solution:
- 左闭右闭
class Solution {
public:
int search(vector<int>& nums, int target) {
int left = 0;
int right = nums.size() - 1;
int mid = 0;
while(left <= right)
{
mid = left + (right - left)/2;
if(target > nums[mid])
left = mid+1;
else if(target < nums[mid])
right = mid - 1;
else
return mid;
}
return -1;
}
};
- 左闭右开
class Solution {
public:
int search(vector<int>& nums, int target) {
int left = 0;
int right = nums.size();
int mid = 0;
while(left < right)
{
mid = left + (right - left)/2;
if(target > nums[mid])
left = mid + 1;
else if(target < nums[mid])
right = mid;
else
return mid;
}
return -1;
}
};
Leetcode 27 移除元素
题目链接:移除元素
Solution:
- 暴力破解
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int size = nums.size();
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(vector<int>& nums, int val) {
int fast, slow = 0;
for(fast=0; fast<nums.size(); fast++)
{
if(nums[fast] != val)
{
nums[slow++] = nums[fast];
}
}
return slow;
}
};
总结
双指针很好用!