Leetcode 704 二分查找
题目链接:704. 二分查找 - 力扣(LeetCode)
注意边界处理
//二分法
//左闭右闭做法
class Solution {
public int search(int[] nums, int target) {
int ans = -1;
int l = 0;
int r = nums.length - 1;
while(l <= r) {
int mid = (l + r) >> 1;//此处代码可能有溢出风险,最好修改为 int mid = l + ((r - l) >> 1);
if(nums[mid] == target) {
ans = mid;
break;
} else if(nums[mid] < target) {
l = mid + 1;
} else {
r = mid - 1;
}
}
return ans;
}
}
//左闭右开
class Solution {
public int search(int[] nums, int target) {
int ans = -1;
int l = 0;
int r = nums.length;
while(l < r) {
int mid = l + ((r - l) >> 1);
if(nums[mid] == target) {
ans = mid;
break;
} else if(nums[mid] > target) {
r = mid;
} else {
l = mid + 1;
}
}
return ans;
}
}
Leetcode 27 移除元素
题目链接:27. 移除元素 - 力扣(LeetCode)
//暴力法
class Solution {
public int removeElement(int[] nums, int val) {
int len = nums.length;
if(len == 0) {
return 0;
}
for(int i = 0; i < len; i++) {
if(nums[i] == val) {
for(int j = i + 1; j < len; j++) {
nums[j - 1] = nums[j];
}
i--;
len--;
}
}
return len;
}
}
//双指针法
public int removeElement(int[] nums, int val) {
int len = nums.length;
if(len == 0) {
return 0;
}
int fast = 0, slow = 0;
while(fast < len) {
if(nums[fast] != val) {
nums[slow++] = nums[fast];
}
fast++;
}
return slow;
}