题目: 704. 二分查找
Leetcode原题链接:力扣704.二分查找
思考历程与知识点:
考查二分查找能力,注意mid的取值。
注意:
右端点的大小,需要在数组长度上-1。也就是nums.size()-1,因为下标是从0开始的。
题解:
class Solution {
public:
int search(vector<int>& nums, int target) {
int mid;
int i = 0, j = nums.size() - 1;
while(j >= i) {
// mid = (i + j + 1)/2; //这个也对,但为了防止溢出选择下面这种写法
mid = i + ((j - i) / 2);
if(nums[mid] == target) return mid;
else if(nums[mid] > target) j = mid - 1;
else i = mid + 1;
}
return -1;
}
};
题目: 27.移除元素
Leetcode原题链接:力扣27.移除元素
思考历程与知识点:
第一反应是求有几个val,用总长度减掉就可以了。发现题目要求原地修改数组。
既然题目说顺序可变,那每当找到一个val,就把它丢到最后面,然后数组长度减1,不就是丢掉了。再把当前最后面那个放回这个val丢完之后的空位,就可以了
注意:
当 i > j 时就要跳出for,而不是遍历到数组最后一个再跳,因为 j 后面都是我们丢过去的val,不能遍历到他们。
题解:
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int j = nums.size() - 1;
for(int i = 0; i <= j; i++) {
if(nums[i] == val) swap(nums[i--], nums[j--]);;
}
return j+1;
}
};
欢迎点赞,收藏,评论,你的鼓励就是我创作的最大动力!(๑╹◡╹)ノ"""
版权声明:本文为CSDN博主「渡梦酒」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:渡梦酒的博客_CSDN博客-csdn领域博主