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

数组基础

1、数组定义:数组是存放在连续内存空间上的相同类型数据的集合。

特点:

  • 数组下标都是从0开始的。
  • 数组内存空间的地址是连续的

2、数组的元素是不能删的,只能覆盖。

704. 二分查找

1、题目链接:. - 力扣(LeetCode)

2、文章讲解:代码随想录

3、视频讲解:手把手带你撕出正确的二分法 | 二分查找法 | 二分搜索法 | LeetCode:704. 二分查找_哔哩哔哩_bilibili

4、题目:

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。

示例 1:

输入: nums = [-1,0,3,5,9,12], target = 9     
输出: 4       
解释: 9 出现在 nums 中并且下标为 4

示例 2:

输入: nums = [-1,0,3,5,9,12], target = 2     
输出: -1        
解释: 2 不存在 nums 中因此返回 -1

提示:

  • 你可以假设 nums 中的所有元素是不重复的。
  • n 将在 [1, 10000]之间。
  • nums 的每个元素都将在 [-9999, 9999]之间。

5、前提条件:数组为有序数组,数组中无重复元素

5、难点:对区间的定义没有想清楚,区间的定义就是不变量

6、遵循点:保证循环不变量原则,要不左闭右闭要不左闭右开

左闭右闭写法
  • 时间复杂度:O(log n)
  • 空间复杂度:O(1)
class Solution {public int search(int[] nums, int target) {// 左闭右闭写法int left = 0;int right = nums.length - 1;while (left <= right) {// 计算中间索引// int middle = (left + right) / 2;// 防止溢出int middle = left + (right - left) / 2;if (nums[middle] < target) {// 左区间left = middle + 1;} else if (nums[middle] > target) {// 右区间right = middle - 1;} else {// 找到了return middle;}}// 没找到return -1;}
}
左闭右开写法
  • 时间复杂度:O(log n)
  • 空间复杂度:O(1)
class Solution {public int search(int[] nums, int target) {// 左闭右开写法int left = 0;int right = nums.length;while (left < right) {// 计算中间索引// int middle = (left + right) / 2;// 防止溢出int middle = left + (right - left) / 2;if (nums[middle] < target) {// 左区间left = middle + 1;} else if (nums[middle] > target) {// 右区间right = middle;} else {// 找到了return middle;}}// 没找到return -1;}
}

27. 移除元素

1、题目链接:. - 力扣(LeetCode)

2、文章讲解:代码随想录

3、视频讲解:数组中移除元素并不容易! | LeetCode:27. 移除元素_哔哩哔哩_bilibili

4、题目:

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。

不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并原地修改输入数组。

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

示例 1: 给定 nums = [3,2,2,3], val = 3, 函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。 你不需要考虑数组中超出新长度后面的元素。

示例 2: 给定 nums = [0,1,2,2,3,0,4,2], val = 2, 函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。

你不需要考虑数组中超出新长度后面的元素。

4、前提条件:不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并原地修改输入数组,元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

5、注意点:数组的元素在内存地址中是连续的,不能单独删除数组中的某个元素,只能覆盖。

暴力解法
  • 时间复杂度:O(n^2)
  • 空间复杂度:O(1)
class Solution {// 暴力解法public int removeElement(int[] nums, int val) {// 定义返回数组长度变量int size = nums.length;// 1.先遍历数组for (int i = 0; i < nums.length; i++) {// 2.找到要删除的元素if (nums[i] == val) {// 3.将后面元素依次前移for (int j = i + 1; j < nums.length; j++) {nums[j - 1] = nums[j];}// 4.将数组长度减一i--;// 5.将返回数组长度减一size--;}}// 6.返回数组的长度return size;}
}
双指针解法

1、 通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。

2、定义快慢指针

  • 快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组
  • 慢指针:指向更新 新数组下标的位置
  • 时间复杂度:O(n)
  • 空间复杂度:O(1)
class Solution {// 双指针解法public int removeElement(int[] nums, int val) {// 定义慢指针int slow = 0;// 定义快指针for (int fast = 0; fast < nums.length; fast++) {// 如果快指针指向的元素不等于要删除的元素,则将快指针指向的元素赋值给慢指针指向的元素if (nums[fast] != val) {nums[slow] = nums[fast];slow++;}}return slow;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/622296.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年华为OD机试真题-小明找位置-Java-OD统一考试(C卷)

题目描述&#xff1a; 小朋友出操&#xff0c;按学号从小到大排成一列&#xff1b;小明来迟了&#xff0c;请你给小明出个主意&#xff0c;让他尽快找到他应该排的位置。 算法复杂度要求不高于nLog(n)&#xff1b;学号为整数类型&#xff0c;队列规模<10000&#xff1b; 输入…

vue 中import 不同层级目录下的文件的表示方式

项目场景&#xff1a; 项目背景&#xff1a; vue 项目中开发页面 需要 用到其它目录下的 文件&#xff0c;需要使用 import 进行导入 问题描述 问题&#xff1a; import util from /libs/util.jsimport drawer from ../drawer/drawerimport mixinViewModule from /mixins/vi…

vue3+ts+vite中封装axios,使用方法从0到1

一、安装axios npm install axios types/axios --save二、配置代理vite.config.ts&#xff0c;如果没有需要新建该文件 module.exports {server: {proxy: {/api: {target: http://localhost:5000, // 设置代理目标changeOrigin: true, // 是否改变请求源地址rewrite: (path)…

氢原子为什么没有中子呢?

问题描述&#xff1a;氢原子为什么没有中子呢&#xff1f; 问题解答&#xff1a; 氢原子是唯一一个没有中子的常见原子。其原子核只包含一个质子&#xff0c;而中子的质量与质子相当&#xff0c;但没有电荷。氢原子的构成为一个质子和一个电子&#xff0c;因此没有中子。 原…

ECMAScript 6 (二)

ECMAScript 6 (二) 面向对象的扩展 不可扩展 一级保护&#xff0c;不可扩展 我们之前在创建的时候&#xff0c;因为JS是一个弱语言&#xff0c;所以对象在创建好之后&#xff0c;任然可以二次添加删除修改属性 同时在ES6里面&#xff0c;虽然推出了const&#xff0c;但是con…

pom.xml中resouces标签

pom.xml中resouces标签 resources是maven在编译项目时将资源文件或者额外的文件赋值到输出目录(target/classes)中。通常包括配置文件&#xff0c;属性文件&#xff0c;模板文件&#xff0c;jar包等。 resouces中可以包含resouce。也就是可以自定义的配置多个资源配置。 direct…

数据结构学习之单向循环链表应用的案例(旋转链表)

实例要求&#xff1a; 1、给定一个链表的头节点 head &#xff0c;请你旋转链表&#xff0c;将链表每个节点向右移动 k 个位置&#xff1b; 2、链表中节点的数目的范围为[0, 500] &#xff1b; 实例分析&#xff1a; 1、入参合理性检查&#xff0c;即head ! NULL || head-&…

JVM运行时数据区(下篇)

紧接上篇&#xff1a;JVM运行时数据区&#xff08;上篇&#xff09;-CSDN博客 堆 一般Java程序中堆内存是空间最大的一块内存区域。创建出来的对象都存在于堆上。 栈上的局部变量表中&#xff0c;可以存放堆上对象的引用。静态变量也可以存放堆对象的引用&#xff0c;通过静态…

Word插件-大珩助手-手写电子签名

手写签名 支持鼠标写&#xff0c;支持触摸屏写&#xff0c;点击画笔按钮切换橡皮擦&#xff0c;支持清空画板重写&#xff0c;点击在word中插入签名&#xff0c;可插入背景透明的签字图 素材库-保存签名 将写好的签字图复制粘贴到素材库中&#xff0c;以便永久使用&#xff…

AMEYA360:广和通RedCap模组FG131FG132系列

2024年1月&#xff0c;广和通RedCap模组FG131&FG132系列已进入工程送样阶段&#xff0c;可为终端客户提供样片。广和通RedCap模组系列满足不同终端对5G速率、功耗、尺寸、成本的需求&#xff0c;全面助力RedCap技术的行业应用。 FG131&FG132系列基于骁龙X35 5G调制解调…

第六站:C++面向对象

面向对象的第一概念:类 类的构成: “类”&#xff0c;是一种特殊的“数据类型”&#xff0c;不是一个具体的数据。 类的设计: 创建一个类: class Human { public://公有的,对外的void eat();//方法,成员函数void sleep();void play();void work();string getName();//获取对内…

Git相关3 —— 命令及添加Gitee的公钥

1.Git相关命令1 -- 工作目录、暂存区、本地仓库、 使用平台有&#xff1a;cmd、Git bash、VSCode window系统修改VSCode默认终端为git bash git init 初始化 --- 新增.git 文件夹 git status 查看 文件/文件夹 状态 git add 需要追踪的文件名/文件夹名 提交到暂存区 git add…

Electron中 主进程(Main Process)与 渲染进程 (Renderer Process) 通信的方式

1. 渲染进程向主进程通信 修改 html 文件内容 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><!-- 解决控制…

docker部署私人云盘nextcloud

1.拉取镜像 docker pull nextcloud 2.创建目录 mkdir -p /data/nextcloud/{config,data,apps} 3.创建实例 docker run -itd --name yznextcloud -v /data/nextcloud/config:/var/www/html/config -v /data/nextcloud/data:/var/www/html/data -v /data/nextcloud/apps:/va…

Sublime Text4 crack时替换的汇编指令

Sublime Text4 crack时替换的汇编指令 首先请支持正版&#xff0c;这里研究破解的步骤&#xff0c;仅做汇编代码学习。 破解步骤很简单&#xff1a; 打开二进制文件&#xff0c; 搜索 80 78 05 00 0F 94 C1&#xff0c; 替换为 C6 40 05 01 48 85 C9. (源: https://gist.git…

项目成本管理

4过程&#xff1a; 规划成本管理&#xff0c;估算成本&#xff0c;制定预算&#xff0c;控制成本 估算和预算的区别&#xff1a; 估算时准备向上级拿钱&#xff0c;通常是数值&#xff0c;项目团队做&#xff0c; 预算是拿到钱之后怎么花&#xff0c;通常是S曲线&#xff0c…

AI-数学-高中-4.函数表达式特性-要变一起变

原作者视频&#xff1a;函数】1引导课&#xff1a;高中为什么用f(x)_哔哩哔哩_bilibili 1.什么是函数&#xff1a;给定任意一个x&#xff0c;都有唯一确定的y与之对应&#xff0c;这种x与y的关系就叫函数&#xff0c;类似一个加工厂。 判断图像是否是函数&#xff0c;用竖直线…

如何用MetaGPT帮你写一个贪吃蛇的小游戏项目

如何用MetaGPT帮你写一个贪吃蛇的小游戏项目 MetaGPT是基于大型语言模型(LLMs)的多智能体写作框架&#xff0c;目前在Github开源&#xff0c;其Start数量也是比较高的&#xff0c;是一款非常不错的开源框架。 下面将带你进入MetaGPT的大门&#xff0c;开启MetaGPT的体验之旅。…

Uncaught TypeError: Cannot set properties of null (setting ‘textContent‘)是什么原因

这个错误提示表示试图设置一个 null 值的 textContent 属性&#xff0c;这通常是因为在试图操作一个不存在的或者不存在于文档中的元素而导致的。 在使用 document.getElementById() 或者类似的方法获取元素时&#xff0c;如果参数所对应的元素不存在时&#xff0c;会返回 nul…