当前位置: 首页 > news >正文

代码随想录算法训练营第一天 | 二分查找

文章目录

    • Leetcode704 二分查找
        • 二分法的使用前提:
        • 区间选择
        • 其他注意事项
    • Leetcode27 移除元素
        • 解题思路:
        • 优化思路

Leetcode704 二分查找

链接:https://leetcode.cn/problems/binary-search/
代码随想录: https://programmercarl.com/
时间复杂度: O(logN)
空间复杂度: O(1)

二分法的使用前提:
  1. 没有重复元素
  2. 数据结构是有序排列
区间选择
  1. [left, right]: 此时left == right的条件是有意义的, 在更新左右索引时均取mid_index的下一位
  2. [left, right): 此时循环条件为left < right. 若>= right则超过判断边界, 在更新右索引时取mid的值
其他注意事项
  1. 避免数据溢出: mid_index = left + ((right - left) >> 1), 等同于(right + left) / 2, 但更安全高效
  2. 除以2可以使用移位操作>> 1
int search(vector<int>& nums, int target) {if (nums.empty()) {return -1;}int left = 0, right = nums.size() - 1;while (left <= right) {int mid_index = left + ((right - left) >> 1);int mid_value = nums[mid_index];if (mid_value == target) {return mid_index;} else if (mid_value < target) {left = mid_index + 1;} else {right = mid_index - 1;}}return -1;
}

Leetcode27 移除元素

链接:https://leetcode.cn/problems/remove-element/
时间复杂度: O(N)
空间复杂度: O(1)

解题思路:

双指针法 即一个指针遍历数组, 一个指针指向需要更新的位置
该方法的问题是: 在最坏情况下, 如若开头第一个元素相等, 后续均不等, 则左指针指向的位置也需要更新n-1次. 该种情况下, 需要遍历该序列至多两次.

优化思路
int removeElement(vector<int>& nums, int val) {int val_index = 0;  // 数值索引for (int i = 0; i < nums.size(); i++) {if (nums[i] != val) {if (i != val_index) {  // 减少数据访问和赋值操作nums[val_index] = nums[i];}val_index++;}}return val_index;
}
http://www.lryc.cn/news/425080.html

相关文章:

  • python相关知识
  • Visual Studio 2022 LNK2001无法解析的外部符号 _wcscat_s 问题记录
  • Java高并发处理机制
  • 7 数据存储单位,整型、浮点型、字符型、布尔型数据类型,sizeof 运算符
  • 导游职业资格考试真题题库
  • 【Rust】使用开源项目搭建瓦片地图服务
  • 【面试宝典】mysql常见面试题总结(上)
  • 第1章 初识C语言
  • 【考研数学】定积分应用——旋转体体积的计算(一文以蔽之)
  • PHP移动端商城分销全平台全端同步使用
  • TLE8386-2EL:汽车级DC-DC转换器中文资料书
  • EasyRecovery17中文mac苹果电脑版数据恢复软件 永久免费破解版下载
  • Ubuntu 22.04 安装 VirtualBox7
  • NPM使用教程:从入门到精通
  • 模电实验3 - 单电源集成运放交流耦合放大器
  • 海对外经贸大学学报
  • 数字化营销在公域场景中的无限可能
  • 聚观早报 | 一加13配置细节曝光;谷歌首推人工智能手机
  • C++ 11相关新特性(lambda表达式与function包装器)
  • FastAPI部署大模型Llama 3.1
  • C++拾趣——编译器预处理宏__COUNTER__的应用场景
  • 使用HTML和cgi实现网页登录功能
  • Java流程控制01:用户交互Scanner
  • 什么是回滚
  • Java项目通过IDEA远程debug调试
  • Python 绘图入门
  • RK3568平台(背光篇)背光驱动代码分析
  • 华为od统一考试B卷【比赛】python实现
  • Prometheus 监控接入规范
  • 优化 SQL 查询性能:深入理解 EXPLAIN 命令