day1:
binary search:
class Solution {
public:
int search(vector<int>& nums, int target) {
int size = nums.size();
int left = 0;
int right = size; //target in [left, right)
while(left < right){ // effective with left < right
int mid = left+ ((right-left)/2);
if(nums[mid] == target)
return mid;
else if(nums[mid] < target){
left = mid + 1; // (mid, right), left should take mid+1
}
else if(nums[mid] > target){
right = mid; // [left, right)
}
}
return -1;
}
};
Remove element:
Lazy version:
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int size = nums.size();
int result = 0;
bool all_are = false;
for(int i = 0; i < size; i++){
all_are = false;
if (nums[i] != val){
result = i+1;
continue;
}
for (int j = i+1; j < size; j++){
if(nums[j] != val){
int temp = nums[j];
nums[j] = nums[i];
nums[i] = temp;
all_are = true;
}
}
if(!all_are){
result = i;
break;
}
}
return result;
}
};
Two pointers: fast and slow
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int size = nums.size();
int j = 0;
for(int i = 0; i < size; i++){
if (nums[i] != val){
nums[j] = nums[i];
j++;
}
}
return j;
}
};