本文主要是介绍【代码随想录算法训练营-第一天】【数组】704. 二分查找、27. 移除元素,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
LeetCode-704.二分查找
【错误】第一遍提交的代码
- 主要错误点:
- 没弄清楚区间的定义导致:r 在定义处的赋值和 if 判断之后 r 的复制没有想清楚;
- 没有搞清楚判断循环结束的条件;
- 没有搞明白区间的定义,r 和 l 如何赋值,如何判断;
class Solution {public int search(int[] nums, int target) {int l = 0;// 这里的赋值和while的判断条件矛盾,会陷入死循环,导致超时int r = nums.length - 1; if (target < nums[0] || target > nums[nums.length - 1]) {return -1;}while (l <= r) {int mid = (r + l) / 2;if (nums[mid] == target) {return mid;}if (nums[mid] < target) {l = mid+1;}if (nums[mid] > target) {r = mid+1;}}return -1;}
}
【正确】第二遍提交代码
- 搞清楚区间的定义,并判断左闭右开的区间范围,如何判断r 和 l 的赋值,以及while结束的条件;
class Solution {public int search(int[] nums, int target) {
int l = 0;int r = nums.length;if (target < nums[0] || target > nums[nums.length - 1]) {return -1;}while (l < r) {int mid = (r + l) / 2;if (nums[mid] == target) {return mid;}if (nums[mid] < target) {l = mid+1;}if (nums[mid] > target) {r = mid;}}return -1;}
}
LeetCode-27.移除元素
【正确】双指针一次AC!
- 因为不用考虑末尾的元素,所以只要保证
fast指针
每次有和val
相等的元素就跳过,然后赋值给slow指针
指向的元素即可。 - 代码随想录给出的是相向双指针,我用的是同向,测试了一下结果差不多。
class Solution {public int removeElement(int[] nums, int val) {int slow = 0, fast = 0;while (fast < nums.length) {if (nums[fast] == val) {fast++;continue;}nums[slow] = nums[fast];fast++;slow++;}return slow;}
}
这篇关于【代码随想录算法训练营-第一天】【数组】704. 二分查找、27. 移除元素的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!