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

代码随想录算法训练营第一天

● 今日学习的文章链接和视频链接

● 自己看到题目的第一想法

1. 704二分法:

方法一:
整个数组是 左闭右闭区间 [ ]

  1. left指针指向数组开始下标, right 指针指向数组最后下表nums.size()-1, mid为 (left+right) /2
  2. 循环条件 left<=right
  3. nums[mid] <target 右移left left = mid+1
    nums[mid] > target 左移right right = mid-1
    nums[mid] = target 返回 mid
    找不到 返回 -1

方法二:
整个数组是 左闭右开区间 [ )

  1. left指针指向数组开始下标, right 指针指向数组最后下表nums.size(), mid为 (left+right) /2
  2. 循环条件 left< right
  3. nums[mid] <target 右移left left = mid+1
    nums[mid] > target 左移right right = mid
    nums[mid] = target 返回 mid
    找不到 返回 -1
2.注意:区间边界问题

整个数组是 左闭右闭区间 [ ]
整个数组是 左闭右开区间 [ )

3.具体代码

方法一:

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

在这里插入图片描述
方法二:

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

在这里插入图片描述

2. 27移除元素

思路

方法一:双指针

  1. 定义下标 快指针fast , 慢指针slow
  2. 循环条件 fast <= nums.size()-1
  3. nums[fast] == val 则fast++;
    nums[fast] != val 则 nums[slow] = nums[fast], slow++, fast++;
    slow最终指向没有val值 数组最后一个元素的下标。

方法二:
4. 定义left =0 right =nums.size()-1
5. 循环条件 left<=right
6. 左边找到nums[left]==val 的下标
右边找到nums[right] !=val 的下标
交换 nums[left] =nums[right] left++; right–;
结果: return left;

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

在这里插入图片描述

注意

slow指:更新后 新数组下标
fast 指:寻找新数组的元素

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

在这里插入图片描述

● 看完代码随想录之后的想法

● 自己实现过程中遇到哪些困难

● 今日收获,记录一下自己的学习时长

http://www.lryc.cn/news/304113.html

相关文章:

  • 基于 java springboot+layui仓库管理系统
  • 电商平台商家结算
  • AIGC 实战:如何使用 Docker 在 Ollama 上离线运行大模型(LLM)
  • MII、RMII、GMII和RGMII,以太网接口中常见的几种标准接口
  • SpringCloudConfig+SpringCloudBus+Actuator+Git实现Eureka关键配置属性热更新(全程不重启服务)
  • 郑州大学2024年寒假训练 Day7:数论
  • “目标检测”任务基础认识
  • springboot+vue的宠物咖啡馆平台(前后端分离)
  • LaWGPT—基于中文法律知识的大模型
  • 一文弄明白KeyedProcessFunction函数
  • alibabacloud学习笔记06(小滴课堂)
  • Code Composer Studio (CCS) - Licensing Information
  • uniapp引入微信小程序直播组件
  • 五个简单的C#编程案例
  • Zlibrary低调官宣2024年最新网址,国内可直接访问,免费下载海量电子书籍
  • Android 开机启动
  • 二叉树相关算法需了解汇总-基础算法操作
  • 万字干货-京东零售数据资产能力升级与实践
  • 探索前端框架的世界:一场前端之旅
  • class complex
  • 数据库系统概论整理与总结
  • 打通新势力NAS权限壁垒,绿联私有云安装Portainer,实现更强大的Docker功能
  • 前端基础自学整理|DOM树
  • RedisDesktopManager无法远程连接到Linux虚拟机中Redis的docker容器的一种解决方案
  • HarmonyOS 权限 介绍
  • 算法训练营day33(补),复习二叉树1
  • k8s-权限管理
  • 四.QT5工具安装和环境变量的配置
  • 为什么需要MDL锁
  • nuxt项目搭建