码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • NO.1 | 704. 二分查找,27. 移除元素


    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) / 2
                mid = 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] == target
                    return mid;
                }
            }
            // 如果nums中不存在target,则返回-1
            return -1;
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    题目链接: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;
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    双指针思路讲解:https://programmercarl.com/0027.%E7%A7%BB%E9%99%A4%E5%85%83%E7%B4%A0.html#%E6%80%9D%E8%B7%AF

  • 相关阅读:
    winform C#键盘钩子(Hook)拦截器,屏蔽键盘深入解析
    linux系统组成及结构
    docker下移除不使用的镜像、容器、卷、网络
    OpenAI Completions API 、Chat Completions API的核心参数
    QQ第三方登录-python_web开发_django框架
    洛谷P5671 【SWTR-02】Triangles
    2023年全球及中国半导体石英坩埚市场发展概况分析:未来需求量迅速增长[图]
    【JavaScript总结】js基础知识点
    剑指 Offer II 021. 删除链表的倒数第 n 个结点【链表】
    无线WiFi安全渗透与攻防(三) 无线信号探测(目前仅kismet)
  • 原文地址:https://blog.csdn.net/weixin_44742084/article/details/134043119
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号