Leetcode704 二分查找
暴力解法:
class Solution {
public:
int search(vector<int>& nums, int target) {
int a,i;
a=nums.size();
for(i=0;i<a;i++)
{
if(nums[i]==target)
{
return i;
}
}
return -1;
}
};
二分解法:
class Solution {
public:
int search(vector<int>& nums, int target) {
int a,i=0;
a=nums.size()-1;
while(a>=i)
{
if(target==nums[(a+i)/2])
{
return (a+i)/2;
}
else if(target<nums[(a+i)/2]){
a=(a+i)/2-1;
}
else if(target>nums[(a+i)/2]){
i=(a+i)/2+1;
}
}
return -1;
}
};
- 感悟:二分查找还是不难的,主要是暴力解法速度和空间都比正经解法块我是没想到的
Leetcode27
题目
暴力解法:
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int m=0,Size,i=0;
Size=nums.size();
if(Size==0)
{
return 0;
}
while(i+m<Size-1)
{
while(nums[i+m]==val&&i+m<Size-1)
{
m++;
}
nums[i]=nums[i+m];
i++;
}
if(nums[Size-1]==val)
m++;
else
nums[i]=nums[Size-1];
return Size-m;
}
};
双指针解法:
-
class Solution { public: int removeElement(vector<int>& nums, int val) { int fast=0,Size,slow=0; Size=nums.size(); for(fast=0;fast<Size;fast++) { if(nums[fast]!=val) { nums[slow++]=nums[fast]; } } return slow; } };
感悟:
- 想了半天只能用暴力解法
- 之前考研王道用的好像也是双指针法,但是自己忘记了
- 以后注意题目条件,看见关键字直接上双指针法