Leetcode 704 二分查找:
题目链接:704.二分查找
class Solution {
public:
int search(vector<int>& nums, int target) {
int left = 0;
int right = nums.size() -1 ;
int mid;
while(left <= right){
mid = left + (right - left)/2;
if(nums[mid] == target){
return mid;
}
else if(nums[mid] > target){
right = mid -1;
}
else{
left = mid + 1;
}
}
return -1;
}
};
早就刷过的一道题,利用左右指针实现二分查找,前闭后开区间是关键。
重新用LeetCode做了一边,算是顺利写出来了
Leetcode 27 移除元素:
题目链接:
27.移除元素
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int left = 0;
int lens = nums.size();
for(int right = 0; right < lens; ++right){
if(nums[right]!=val){
nums[left] = nums[right];
++left;
}
}
return left;
}
};
本题一开始想使用erase删除,但是发现erase后会产生边界问题。看了Carl的教程之后知道采用双指针解决。代码自己编写。
疑问:本题的vector并没有更改大小,最后如果size()的话,还是原始的大小。仅仅改变了头部的数据使得其符合要求。这样用end()时会不会返回错误的迭代器?
其余学习:
- 课题学习
- 嵌入式Linux学习,韦东山嵌入式课程