首页 > 编程语言 >代码随想录算法训练营Day01|704. 二分查找、27. 移除元素

代码随想录算法训练营Day01|704. 二分查找、27. 移除元素

时间:2022-11-16 21:13:40浏览次数:75  
标签:二分 27 nums int 元素 随想录 查找 移除 指针

代码随想录算法训练营Day01|704. 二分查找、27. 移除元素

704. 二分查找

题目链接:704.二分查找

首先注意题干的描述:

  • 题干描述说明了元素是升序排列的,否则需要调用sort进行手动排序
  • 另外提示中说明元素不重复,因此不空考虑二分查找多解的情况。

说回题目本身,重点在于二分查找边界和遍历时终止的条件之间的匹配。

简单总结来说就是“左闭右开不相等,左闭右闭要相等。”


题解如下:

①左闭右开

class Solution {
public:
    int search(vector<int>& nums, int target) {
        int len = nums.size();
        // cout << len << endl;
        int left = 0, right =len, mid; 
        while (left < right) {
            mid = (left + right) / 2;
            if (nums[mid] < target)
                left = mid + 1;
            else if (nums[mid] > target)
                right = mid;
            else
                return mid;
        }
        return -1;
    }
};

②左闭右闭

class Solution {
public:
    int search(vector<int>& nums, int target) {
        int mid, len = nums.size();
        int left = 0, right = len - 1;
        while (left <= right) {
            mid = (left + right) / 2;
            if (nums[mid] < target) 
                left = mid + 1;
            else if (nums[mid] > target)
                right = mid - 1;
            else
                return mid;
        }
        return -1;
    }
};

27. 移除元素

题目链接:27.移除元素

题干要求空间复杂度为O(1),这意味着我们必须再原数组上进行删减和修改,不能再开辟新的存储空间。

思路是利用快慢指针的方法:

  • 快指针:负责遍历原数组,寻找与target不相等的数据元素。

  • 慢指针:负责对原数组进行原地修改,将快指针找到的不等元素重新赋值给数组。

    因为慢指针始终慢于/齐平于快指针,所以慢指针修改的下标位置必定已经被快指针筛选过。


代码如下:

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        // 快慢指针原地修改数组
        int fast = 0, slow = 0;
        while (fast < nums.size()) {
            if (nums[fast] != val) {
                nums[slow] = nums[fast];
                slow++;
            }
            fast++;
        }
        return slow;
    }
};

标签:二分,27,nums,int,元素,随想录,查找,移除,指针
From: https://www.cnblogs.com/buryinshadow/p/16897507.html

相关文章

  • day27 -选择器完
    层次选择器选择全部*p{}所有该属性标签都会改变样式 1p{2background:#15f50c;3} 后代选择器选择某一项的后代所有的该元素都改变样式 1后代选......
  • ABC277 E~Ex
    E:简单最短路,加一维表示当前是否翻转所有边的状态即可。CodeF:先考虑简化版本,如果\(\left\{A\right\}\)中没有\(0\),如何判定。重新表述一下条件,令\(mn_i,mx_i\)分......
  • 2022-01-27 redis集群技术调研
    目录​​摘要:​​​​redis集群方案选型:​​​​redis集群前端代理proxy技术选型:​​​​redis集群的扩容/缩容:​​​​rediscluster集群的节点高可用​​​​redis节......
  • 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素
    目录两道题704.二分查找27.移除元素省流两道题704.二分查找  1、数组算是最简单,也最不抽象的数据结构了。二分法,我也在学习路上听过不少次,所以是实际实现也很快,没有......
  • 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素。
    今日任务数组理论基础,704.二分查找,27.移除元素1数组理论基础文章链接:https://programmercarl.com/%E6%95%B0%E7%BB%84%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html......
  • 代码随想录第三十五天 | 贪心算法
     第三十五天,继续贪心 860.柠檬水找零 classSolution{publicbooleanlemonadeChange(int[]bills){intn=bills.length;if(bills[0......
  • 27个提升效率的iOS开源库推荐
    27个提升效率的iOS开源库推荐DZNEmptyDataSet(UI,空表格视图解算器)PDTSimpleCalendar(UI,drop-in日历组件)MagicalRecord(实施活跃记录模式的CoreData助手)Chameleon(UI,色彩框架......
  • javascript-代码随想录训练营day1
    704.二分查找力扣题目链接:https://leetcode.cn/problems/binary-search/题目描述:给定一个n个元素有序的(升序)整型数组nums和一个目标值target,写一个函数搜索nums......
  • ABC277 E~Ex
    E:简单最短路,加一维表示当前是否翻转所有边的状态即可。CodeF:先考虑简化版本,如果\(\left\{A\right\}\)中没有\(0\),如何判定。重新表述一下条件,令\(mn_i,mx_i\)分......
  • 第五章第2节: 2020.05.27 智能互联网之弹性容器云与Service Mesh【二】
                        pod访问集群外的应用  集群外访问pod或者pod内的service ......