704.二分查找法
- 解题思路: 二分查找、
- 注意点:注意二分查找区间定义的范围,是左闭右闭还是左闭右开,不同的范围设置,具体解法也不同。
题解1:采用左闭右闭区间
class Solution {
public int search(int[] nums, int target) {
//假设区间是左闭右闭区间
int left = 0;
int right = nums.length - 1;
while (left <= right){
int middle = (left + right)/2; //注意越界问题
if(target < nums[middle]){
right = middle - 1;
}
else if (target > nums[middle]){
left = middle + 1;
}
else{
return middle;
}
}
return -1;
}
}
题解2:采用左闭右开区间
class Solution {
public int search(int[] nums, int target) {
//采用左闭右开区间 [)
int left = 0;
int right = nums.length;
while (left < right){
int middle = (left + right)/2;
if (target < nums[middle]){
right = middle;
}
else if (target > nums[middle]){
left = middle + 1;
}
else {
return middle;
}
}
return -1;
}
}
27. 移除元素
- 解题思路: 暴力搜索、快慢指针
- 注意点:
题解1:暴力求解
class Solution {
public int removeElement(int[] nums, int val) {
//暴力破解法
int size = nums.length;
int i = 0;
for(i=0;i<size;i++){
if(nums[i] == val){
int j;
for(j=i+1;j<size;j++){
nums[j-1]=nums[j];
}
size--;
i--;
}
}
return size;
}
}
题解2:快慢指针
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int fast=0;
int slow=0;
while(fast<nums.size()){
if(nums[fast]!=val){
nums[slow]=nums[fast];
slow++;
}
fast++;
}
return slow;
}
};