已解决
NO.1 | 704. 二分查找,27. 移除元素
来自网友在路上 166866提问 提问时间:2023-10-25 22:42:52阅读次数: 66
最佳答案 问答题库668位专家为你答疑解惑
NO.1 | 704. 二分查找,27. 移除元素
题目链接:704.二分查找
- 前置条件:数组是有序的才可以,如果是乱序的数组则不可使用该题方法
- 暴力解法:直接遍历,对每个元素都进行判断是否等于target,时间复杂度O(n)。但是这样就没有使用上数组有序的这个条件
- 二分查找: 代码及注释如下
class Solution {
public:int search(vector<int>& nums, int target) {// 有序数组 --> 二分查找// left为数组的起始位置, right为数组的末尾位置int left = 0;int right = nums.size()-1;int mid = 0;while(left <= right){ // 更新mid// 以下写法优于 mid = (left + right) / 2mid = left + (right - left) / 2;if(nums[mid] < target){// 由于数组是升序,此时说明target在当前所以mid的右边// left=mid相当于把mid左边的排除掉left = mid + 1;}else if(nums[mid] > target){ right = mid - 1;}else{// nums[mid] == targetreturn mid;}}// 如果nums中不存在target,则返回-1return -1;}
};
题目链接:27. 移除元素
解题思路:用覆盖代替删除,舍弃val的元素,然后被其他元素覆盖
class Solution {
public:int removeElement(vector<int>& nums, int val) {// 有效的元素int valid_pos = 0;// 遍历数组for(int i = 0; i < nums.size(); i++){// val != nums[i],说明 i 不需要被覆盖,就放到有效位上if(val != nums[i]){// 实现后面的元素前移,而且不用特意删除前面的元素,直接覆盖掉nums[valid_pos] = nums[i];valid_pos += 1;}else{// val == nums[i]// 不对 i 处理,如果要用到该位置,也会被覆盖掉}}return valid_pos;}
};
双指针思路讲解:https://programmercarl.com/0027.%E7%A7%BB%E9%99%A4%E5%85%83%E7%B4%A0.html#%E6%80%9D%E8%B7%AF
查看全文
99%的人还看了
相似问题
猜你感兴趣
版权申明
本文"NO.1 | 704. 二分查找,27. 移除元素":http://eshow365.cn/6-24504-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: 算法进修Day-38
- 下一篇: 单片机核心/RTOS必备 (ARM汇编)