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

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

时间:2023-11-29 16:33:47浏览次数:46  
标签:27 nums int 随想录 指针 right 移除 size left

LeetCode 704 二分查找

题目链接 : LeetCode704

左闭右闭:

视频讲解: 手把手带你撕出正确的二分法

思路: 在循环条件中注明left<=right,即[left,right]

class Solution {
public:
    int search(vector<int>& nums, int target) {
        int left = 0, right = nums.size() - 1;
        while (left <= right) {
            int middle = (left+right)/2;
            if(nums[middle]>target) right=middle-1; //因为是一个闭区间,只能取middle内的数组空间,所以right取middle-1
            else if(nums[middle]<target) left=middle+1; //同上
            else if(nums[middle]==target) return middle;
        }
        return -1;
    }
};

 

左闭右开:

思路: 在循环条件中注明left<=right,即[left,right)

class Solution {
public:
    int search(vector<int>& nums, int target) {
        int left = 0, right = nums.size();
        while(left<right){
            int middle = (left+right)/2;
            if(nums[middle]>target) right = middle; //在左闭右开区间中,right取不到middle,因为left<right
            else if(nums[middle]<target) left = middle+1; // left取middle+1是因为左闭
            else if(nums[middle]==target) return middle;
        }
         return -1;
    }
};

 

 

LeetCode 27 移除元素

题目链接 : LeetCode27

暴力破解:  时间复杂度为O(n²)

思路: 数组是一个空间连续的数据结构,如果要删除下标为i所在位置的数据,则要将i+1位置的数据填充到i位置处

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int size=nums.size();
        for(int i=0;i<size;i++){
            if(nums[i]==val){
                for(int j=i+1;j<size;j++){
                    nums[j-1]=nums[j];
                }
                i--;
                size--;
            }
        }
            return size;
    }
};

 

双指针实现: 时间复杂度为O(n)

思路: 通过设置两个指针,一个快指针一个慢指针,将快指针不与目标值相等的数存入到慢指针数组中,实现在同一个数组中的删除元素操作。

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int slow=0;
        int size=nums.size();
        for(int fast=0;fast<size;fast++){
            if(nums[fast]!=val){
                nums[slow++]=nums[fast];
                //slow++;
            }
        }
            return slow;
        }
};

 

双指针优化: 时间复杂度O(n)

思路: 在双指针实现的算法中,我们找到了目标值后所有的目标值之后的数据都要往前面进一位。所以我们将数组最后一个空间的数据传到目标值所在的空间当中,这样我们就只需要进行一次数组转移即可实现目标元素移除。

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int left=0; int right=nums.size();
        while(left<right){
            if(nums[left]==val){
                nums[left]=nums[right-1];
                right--;
            }else{
                left++;
            }
        }
        return right;
    }
};

 

 

标签:27,nums,int,随想录,指针,right,移除,size,left
From: https://www.cnblogs.com/ygmzj/p/17864508.html

相关文章

  • FileNotFoundError: [WinError 2] 系统找不到指定的文件。: '0054243eb93327df4b59023
    importos#指定目录directory='E:\\pythonProject\\a'#获取当前目录下所有图片文件image_files=[fforfinos.listdir(directory)iff.endswith('.jpg')orf.endswith('.png')orf.endswith('.jpeg')]#重命名图片文件fori,fileinenumer......
  • 「Log」做题记录 2023.11.27-
    \(2023.11.27-2023.12.3\)\(\color{black}{P6965}\)2-sat是显著的。对于无问号串,直接否定向自己连边即可,然后塞到Trie树里。Trie树上用子树、路径前缀优化建图即可。\(\color{blueviolet}{P4334}\)圆方树,点是显著的,割边转换为对应方点即可。\(\color{blueviolet}{CF855......
  • [翻译]——How the MySQL Optimizer Calculates the Cost of a Query (Doc ID 1327497
    本文是对这篇文章HowtheMySQLOptimizerCalculatestheCostofaQuery(DocID1327497.1)[1]的翻译,翻译如有不当的地方,敬请谅解,请尊重原创和翻译劳动成果,转载的时候请注明出处。谢谢!适用于:MySQL4.0及后续更高的版本本文档中的内容适用于任何平台。目标了解MySQL优化器如......
  • [ABC277G] Random Walk to Millionaire 题解
    题目链接点击打开链接题目解法首先\(O(n^3)\)的\(dp\)是显然的,令\(f_{i,j,k}\)为第\(i\)步在\(j\),当前等级为\(k\)的\([i,n]\)步获得钱数的期望,转移枚举出边即可一个很妙的优化是:贡献都是\(k^2\)的形式,所以我们考虑维护\(k\)的\(0,1,2\)次幂,即\(\sum,\sum......
  • SpringMVC_2023_11_27_2 SpringMVC_入门(注解形式)
    SpringMVC_入门---(注解形式)2023-11-2816:31:09星期二常用的注解:@Controller:标注当前类为:处理器@RequestMapping:设置请求链接SpringMVC注解项目的搭建a) 依赖的引入<dependencies><dependency><groupId>javax.servlet</groupId><......
  • 2023-2024-1 20211327 myxxd(课上测试)
    myxxd(课上测试)学***d的使用,提交至少3个应用截图xxd的主要功能是什么?需要使用什么系统调用来实现?写出你的推导过程,命令xxd主要用于查看文件的十六进制表示,并提供了一些额外的功能,如生成C语言风格的数组表示。它的主要功能包括:查看文件的十六进制表示:显示文件内容的十......
  • 聪明办法学python-11.27——11.29笔记打卡
    一、python中条件语句的应用总体代码结构为:ifTrue:dosomethingelse:doother简单描述为“True”为条件,当条件为真的时候,执行“dosomething”,否则就执行“doother”。例如:任务:实现一个函数,返......
  • 聪明办法学Python_task3_11.27-11.28
    聪明办法学Python_task3_11.27-11.28聪明办法学Python_task3_11.27-11.281.task05条件1.1if-else语句1.2if-else推导式1.3match-case语句2.talk01代码风格1.task05条件1.1if-else语句分为if、if-else、if-elif-elseif条件1:语句1elif条件2:......
  • 【2023-11-27】父母问题
    20:00人生到世界上来,如果不能使别人过得好一些,反而使他们过得更坏的话,那就太糟糕了。                                                 ——艾略特早上8点,把何太准时......
  • SpringMVC_2023_11_27_1 SpringMVC_入门
    SpringMVC_入门2023-11-2816:11:38星期二SpringMVC是Spring提供给Web应用的框架设计。。SpringMVC角色划分清晰,分工明细,并且和Spring框架无缝结合。作为当今业界最主流的Web开发框架,SpringMVC已经成为当前javaWeb框架事实上的标准。SpringMVC核心组件a) 前......