代码随想录算法训练营第一天 | 题目 704,34,27

文档讲解: 

代码随想录代码随想录PDF,代码随想录网站,代码随想录百度网盘,代码随想录知识星球,代码随想录八股文PDF,代码随想录刷题路线,代码随想录知识星球八股文icon-default.png?t=N7T8https://programmercarl.com/0704.%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.html

视频讲解:

        

手把手带你撕出正确的二分法 | 二分查找法 | 二分搜索法 | LeetCode:704. 二分查找_哔哩哔哩_bilibili《代码随想录》算法公开课开讲啦!快来打卡!代码随想录刷题网站:programmercarl.com, 视频播放量 381869、弹幕量 1567、点赞数 13341、投硬币枚数 12709、收藏人数 12839、转发人数 1725, 视频作者 代码随想录, 作者简介 我是Carl,哈工大师兄,先后在腾讯和百度从事一线技术研发的程序员,公众号「代码随想录」,相关视频:一周刷爆LeetCode,算法大神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解(马士兵),Leetcode力扣 1-300题视频讲解合集|手画图解版+代码【持续更新ing】,LeetCode 力扣算法入门·宝藏博主推荐⚡️,华为算法大佬耗时200小时录制:Leetcode刷题100道,足以吊打字节面试官!,花了2万多买的Python教程全套,现在分享给大家,入门到精通(Python全栈开发教程),王道计算机考研 计算机网络,15天刷完LeetCode热门算法200道,带你吃透大厂算法面试攻略(附力扣算法刷题笔记),【蓝桥杯比赛】视频教程(入门学习+算法辅导),黑马程序员Java零基础视频教程_上部(Java入门,含斯坦福大学练习题+力扣算法题和大厂java面试题),【CSAPP-深入理解计算机系统】1-1.计算机系统漫游icon-default.png?t=N7T8https://www.bilibili.com/video/BV1fA4y1o715

 Leetcode 704

 左闭右闭区间 

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

leetcode 34

class Solution {
public:
    vector searchRange(vector& nums, int target) {
        int leftBorder = getLeftBorder(nums, target);
        int rightBorder = getRightBorder(nums, target);
        // leftmost or rightmost
        if (leftBorder == -2 || rightBorder == -2) return {-1, -1};
      // value exists and within the rnage
        if (rightBorder - leftBorder > 1) return {leftBorder + 1, rightBorder - 1};
  // value not exist and within the range
        return {-1, -1};
    }
private:
     int getRightBorder(vector& nums, int target) {
        int left = 0;
        int right = nums.size() - 1;
        int rightBorder = -2; 
        while (left <= right) {
            int middle = left + ((right - left) / 2);
            if (nums[middle] > target) {
                right = middle - 1;
            } else {
                //
                // when equal to the range,expand to left
                left = middle + 1;
                rightBorder = left;
            }
        }
        return rightBorder;
    }
    int getLeftBorder(vector& nums, int target) {
        int left = 0;
        int right = nums.size() - 1;
        int leftBorder = -2; 
        while (left <= right) {
            int middle = left + ((right - left) / 2);
            if (nums[middle] >= target) { 
                // expand to left
                right = middle - 1;
                leftBorder = right;
            } else {
                left = middle + 1;
            }
        }
        return leftBorder;
    }
};

leetcode 27

快指针获取新元素,慢指针删除后数组

class Solution {
public:
    int removeElement(vector& nums, int val) {
       int slow =0;
       for(int fast = 0;fast 

你可能感兴趣的:(算法)