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

算法入门打卡Day1___时间复杂度、二分查找、双指针、快慢指针、右移运算符

算法入门打卡Day1

今日收获

  1. 了解了时间复杂度的意义和简单计算方式
  2. 二分查找
  3. 双指针法、快慢指针法
  4. 右移运算符在除法的应用

学习时长:2h

正文

时间复杂度的计算

我参考的学习视频如下:

【数据结构——时间复杂度计算】

总体思想为,找出循环次数i与执行次数t的关系,再与含n的临界条件联立解出

或者在双层循环中,列出外层循环的变量i值与对应的内层循环执行次数,在外层执行到与n相关的临界条件时对内层执行次数进行求和,通常是等差或者等比数列

二分查找

LeetCode704

给定一个升序的不重复数组查找target的位置。

以下定义的区间为左闭右开[left, right)

class Solution {
public:int search(vector<int>& nums, int target) {int left = 0;int right = nums.size(); // 定义target在左闭右开的区间里,即:[left, right)while (left < right) { // 因为left == right的时候,在[left, right)是无效的空间,所以使用 <int middle = left + ((right - left) >> 1);if (nums[middle] > target) {right = middle; // target 在左区间,在[left, middle)中} else if (nums[middle] < target) {left = middle + 1; // target 在右区间,在[middle + 1, right)中} else { // nums[middle] == targetreturn middle; // 数组中找到目标值,直接返回下标}}// 未找到目标值return -1;}
};

快慢指针

LeetCode27

给你一个数组 nums 和一个值 val,你需要移除所有数值等于 val 的元素。然后返回 nums 中与 val 不同的元素的数量。

int removeElement(vector<int>& nums, int val) {int slowIndex = 0;for (int fastIndex = 0; fastIndex < nums.size(); fastIndex++) {if (val != nums[fastIndex]) {nums[slowIndex++] = nums[fastIndex];}}return slowIndex;}

快指针负责查找前方的元素,慢指针在后方停留出足够的空间存放从快指针转移来的元素。

若慢指针开始连续停留,则快慢指针间(左闭右开)一定全是特殊元素,后面快指针找到有效元素一个个填充即可。

任何时候快慢指针之间的元素都可以被替换,因为都是特殊元素和已经被转移到慢指针前的有效元素。

双指针

LeetCode977

给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。

vector<int> sortedSquares(vector<int>& nums) {int k = nums.size() - 1;vector<int> arr(k + 1);int rightIndex = k;int leftIndex = 0;while (leftIndex <= rightIndex) {if (nums[leftIndex] * nums[leftIndex] < nums[rightIndex] * nums[rightIndex]) {arr[k--] = nums[rightIndex] * nums[rightIndex];rightIndex--;}else {arr[k--] = nums[leftIndex] * nums[leftIndex];leftIndex++;}}return arr;}

由于平方最大的只会出现在两个端点,于是新建一个数组和双指针,从两头往中间将最大的一个个填入新数组末尾即可。

这里我出现过一个语法错误,即误将vector<int> arr(k + 1)写作vector<int> arr[k + 1],要注意后者中括号中的不是给整型数组初始化的长度,而是一个元素为整型数组的数组的长度,正确的写法是前者。

右移运算符在除法的应用

核心原理是二进制数的右移,在左边空白部分正补0负补1,最右边一位舍弃。

在整型为正时:

n >> 1;	等价于:n / 2;
而且前者的运行速度更快!

在整型为负时:

-7 / 2 = -3;	//向0取整
-7 >> 1 = -4;	//向下取整
http://www.jsqmd.com/news/316638/

相关文章:

  • 儿童玩具遥控车厂家哪家性价比高,汕头口碑好的厂家怎么选?
  • Nodejs+vue微信小程序的反诈科普平台
  • 2026年知名的红外对射火灾探测器/多光谱火灾探测器厂家最新推荐排行榜
  • PDF24转word教程,免费无广告超好用
  • Nodejs+vue微信小程序的奶茶甜品网上商城系统
  • Nodejs+vue微信小程序的宠物领养平台
  • 团队裂变营销:如何用“3组模型”实现业绩倍增?
  • Nodejs+vue微信小程序的个人理财消费收支系统
  • 微调大型语言模型:根据您的需求定制Llama 3 8B
  • Nodejs+vue微信小程序的健康饮食美食商城系统
  • 工业设备智能运检监测管理系统方案
  • 一键部署Llama2大模型到本地,无需联网,无需GPU,支持图片内容识别
  • 2026年知名的钢板预处理线厂家最新推荐权威榜
  • 47.从前序与中序遍历序列构造二叉树
  • 信创生态认证视角:国产DevOps平台选型的权威认证价值与实操评估方法
  • 从团团收到分期乐支付宝红包:最实用的套装回收全流程解析
  • 2026年靠谱的四川家装电线电缆/中高压电缆厂家选购指南与推荐
  • 【EI会议】2026年计算机视觉、AI与智能自动化国际学术会议(ICCVAA 2026) - Vg
  • 不锈钢精密铸造厂家哪家强?2026年厂家推荐与排名,解决技术适配与供应链核心痛点
  • 2026年佳能石材机械排名公布,靠谱品牌客户认可度超高
  • Python 元组(tuple)高级用法全解析:不可变性下的高效编程
  • 可信数据空间、隐私计算、多方安全计算……厂商打包卖,但它们根本不是一回事
  • 24GB显卡轻松上手InternLM-20B大模型,手把手教程来啦
  • 基于遗传算法的路径规划算法matlab代码(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • 电力系统潮流计算与优化分析-基于混合算法的仿真研究(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • MATLAB用遗传算法解决旅行商TSP问题(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • 如何将CAD中的云线转为线段?
  • 接受外包Offer前一定要清楚的4件事
  • 智能空开实力供应商与生产商全解析:标杆企业、选购指南及2026下半年展望
  • Moltbot云上部署实录,仅需1分钟,把Clawdbot部署到轻量应用服务器,别在本地跑了~