文章目录
- Leetcode 704. 二分查找
- 解题思路
- 代码
- 总结
- Leetcode 27. 移除元素
- 解题思路
- 代码
- 总结
草稿图网站
java的Deque
Leetcode 704. 二分查找
题目:704. 二分查找
解题思路
1.左闭右闭区间的搜索,循环条件为left <= right。
2.左闭右开区间的搜索,循环条件为left < right。
代码
//1.左闭右闭
class Solution {
public int search(int[] nums, int target) {
int left = 0, right = nums.length - 1;
while (left <= right){
int mid = left + (right - left) / 2;
if (nums[mid] > target){
right = mid - 1;
}else if (nums[mid] < target){
left = mid + 1;
}else{
return mid;
}
}
return -1;
}
}
//2.左闭右开
class Solution {
public int search(int[] nums, int target) {
int left = 0, right = nums.length;
while (left < right){
int mid = left + (right - left) / 2;
if (nums[mid] > target){
right = mid;
}else if (nums[mid] < target){
left = mid + 1;
}else{
return mid;
}
}
return -1;
}
}
总结
暂无
Leetcode 27. 移除元素
题目:27. 移除元素
解题思路
双指针,快指针找到第一个不是val的后,两个指针一起走一步
代码
class Solution {
public int removeElement(int[] nums, int val) {
int left = 0, right = 0;
while (right < nums.length){
while (right < nums.length && nums[right] == val){
right++;
}
if (right >= nums.length)
break;
nums[left++] = nums[right++];
}
return left;
}
}
总结
代码有一定冗余,karl哥的代码更精炼
class Solution {
public int removeElement(int[] nums, int val) {
int slowIdx = 0;
for (int fastIdx = 0; fastIdx < nums.length; fastIdx++){
if (val != nums[fastIdx]){
nums[slowIdx++] = nums[fastIdx];
}
}
return slowIdx;
}
}