代码随想录训练营day1

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

输入

输出

nums = [-1,0,3,5,9,12], target = 9

4

nums = [-1,0,3,5,9,12], target = 2

-1

问题类型:二分

考察点:二分查找的区间表示

右闭区间(ri = len(nums)-1):

右闭区间的写法,再遍历过程中lf<=ri ,因为lf可以取到ri对应的值

右开区间(ri = len(nums)):

右开区间的写法,再遍历过程中lf<ri ,因为lf不可以取到ri对应的值

实际上两个区间表示的元素个数都是一样的,左区间都是闭区间,处理方式一致。而右区间的不一致这将导致在分支判断过程中会出现不一致。

对于右闭区间,nums[mid]< target时,ri需要更新,此时明确nums[mid]是不会为target的,所以ri = mid -1。

对于右开区间,nums[mid]< target时,ri需要更新,此时ri属于开区间,ri = mid

或者换一种方式理解,开区间天生比闭区间多1,所以按照写法开区间等价于ri = 1+mid -1 也就是mid。

func search(nums []int, target int) int {lf,ri := 0,len(nums)-1mid:= lf+ (ri-lf)/2for lf <= ri{mid = lf+ (ri-lf)/2if nums[mid] > target{ri = mid -1}else if nums[mid] < target{lf = mid+1}else {return mid}}return -1 
}
func search(nums []int, target int) int {lf,ri := 0,len(nums)mid := 0for lf <ri{mid = lf +(ri-lf)/2if nums[mid] >target{ri = mid}else if nums[mid] < target{lf = mid +1}else{return mid}}return -1
}

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

不要使用额外的数组空间,你必须仅使用 O(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,4,0,3]

问题类型:双指针、暴力循环

考察点:双指针的使用:覆盖后向指针元素 有效 前向指针元素

思路1:暴力,

暴力也是一种双指针,属于移动位置的双指针,i用来判断当前元素是否为所需元素,j元素控制数组进行腾挪。

不管怎样,暴力必须要学会,暴力是走路,双指针就是跑步

思路2:双指针1

追及问题,同向先后双指针,ri指针在前,lf指针在后,ri指针负责遍历全部数组,如果遍历过程中遇到不是val的元素就赋值给lf,并让lf++,如果是val,就跳过,lf不动。最后返回lf

思路3:双指针2

相遇问题,一个在起点,一个在终点,如果lf遇到val,就把ri-1的值赋给lf,ri--,否则lf++

func removeElement(nums []int, val int) int {size := len(nums)for i:=0;i<size;i++{if nums[i] ==val{for j:= i+1;j<size;j++{nums[j-1] =nums[j]}i--size--}}return size
}
func removeElement(nums []int, val int) int {lf := 0for  ri:=0;ri<len(nums);ri++{ // v 即if  nums[ri] != val {nums[lf] =  nums[ri]lf++}}return lf
}
func removeElement(nums []int, val int) int {lf,ri := 0,len(nums)for lf < ri {if nums[lf] == val{nums[lf] = nums[ri-1]ri--}else{lf ++}}return lf
}

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

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

相关文章

【Spring系列】数据库初始化

背景 最近在配置数据库的初始化时&#xff0c;遇到 sql:init:schema-locations: classpath:db/schema.sqldata-locations: classpath:db/data.sqlusername: sapassword:网上搜索资料&#xff0c;大同小异&#xff0c;都是无用的资料&#xff0c;于是决定自己研究下数据库的初始…

结构型设计模式之组合模式【设计模式系列】

系列文章目录 C技能系列 Linux通信架构系列 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 设计模式系列 期待你的关注哦&#xff01;&#xff01;&#xff01; 现在的一切都是为将来的梦想编织翅膀&#xff0c;让梦想在现实中展翅高飞。 Now everythi…

使用POI设计一个限制导出日期为三十天,且导出文件为excel

使用POI设计一个限制导出日期为三十天&#xff0c;且导出文件为excel&#xff0c;前端使用Vue的element ui进行设计&#xff0c;前端可以通过选择时间来导出具体的表格数据&#xff0c;根据用户选择的时间进行Excel文件的数据导出。 按照需求来设计代码&#xff0c;根据element…

SkyWalking链路追踪-Agent (代理人)

基础概念&#xff1a; SkyWalking链路追踪代理&#xff08;SkyWalking Tracing Agent&#xff09;是一种用于收集和传输链路追踪数据的工具。它与应用程序一起部署&#xff0c;并通过自动或手动方式来收集关于应用程序中的请求路径和操作的信息。该代理将收集到的数据发送到Sky…

Hadoop学习日记-MapReduce思想及执行流程

MapReduce思想 Map负责“拆分”&#xff1a;即将复杂问题拆分成可以并行计算的小问题&#xff0c;彼此之间几乎没有依赖联系。 Reduce负责对Map阶段的结果进行合并汇总 Map和Reduce的抽象接口如下&#xff1a; map:(k1; v1) — (k2; v2) reduce:(k2; [v2]) — (k3; v3) 一…

看了2023年的一线互联网公司时薪排行榜!值得思考

前言 根据最近针对国内的一线互联网企业做的调研&#xff0c;汇总了他们的平均时薪水平&#xff0c;最终出了一个排行榜&#xff01; 首先我们来看下&#xff0c;排行榜分哪几个Level&#xff0c;分别为初级、中级、高级、资深、专家/架构这五个&#xff0c;主要根据工程师的…

Druid(德鲁伊)连接池

Druid(德鲁伊)连接池 阿里出品&#xff0c;淘宝和支付宝专用数据库连接池&#xff0c;但它不仅仅是一个数据库连接池&#xff0c;它还包含一个ProxyDriver&#xff08;代理驱动&#xff09;&#xff0c;一系列内置的JDBC组件库&#xff0c;一个SQL Parser(sql解析器)。支持所有…

基于Javaweb实现ATM机系统开发实战(十四)交易记录分页实现

还是老规矩&#xff0c;先看前端页面查看需要传递哪些参数&#xff0c;并且把逻辑有问题的部分进行修改~ <% page language"java" contentType"text/html; charsetUTF-8" pageEncoding"UTF-8"%> <% taglib prefix"c" uri&qu…

自然语言处理14-基于文本向量和欧氏距离相似度的文本匹配,用于找到与查询语句最相似的文本

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下自然语言处理14-基于文本向量和欧氏距离相似度的文本匹配&#xff0c;用于找到与查询语句最相似的文本。NLP中的文本匹配是指通过计算文本之间的相似度来找到与查询语句最相似的文本。其中一种常用的方法是基于文本…

Docker安装Redis与Python的交互

Redis数据库&#xff0c;平常做缓存用的最多&#xff0c;之前一直没有记录过redis的安装流程&#xff0c;等到用时才想起来去百度上搜索&#xff0c;然而搜出来的东西十有八九都大同小异。所以这次用docker安装一下&#xff0c;再此记录 redis是一个key-value存储系统。和Memc…

AcrelEMS企业微电网能效管理平台实现用户侧智能配电和智能用电管理-安科瑞黄安南

摘要&#xff1a;随着科技的发展&#xff0c;电力系统正逐步向智能化、数字化、互联网化迈进。智能配电与智能用电是电力产业发展的重要方向&#xff0c;将为传统电力系统带来革命性的变革。本文将对智能配电和智能用电的概念、特点、关键技术及应用进行详细介绍。 1、智能配电…

数据结构初阶--带头双向循环链表

目录 一.带头双向循环链表的定义 二.带头双向循环链表的功能实现 2.1.带头双向循环链表的定义 2.2.带头双向循环链表的结点创建 2.3.带头双向循环链表的初始化 2.4.带头双向循环链表的打印 2.5.带头双向循环链表的判空 2.6.带头双向循环链表的尾插 2.7.带头双向循环链…

【node.js】02-path模块

目录 1. path.join() 2. path.basename() 3. path.extname() 1. path.join() 使用 path.join() 方法&#xff0c;可以把多个路径片段拼接为完整的路径字符串&#xff0c;语法格式如下&#xff1a; path.join([...paths]) 例子&#xff1a; const path require(path)co…

白皮书|数字孪生工厂:成就智能制造的未来

前言 目前我国已经进入“技术应用”的数字孪生双驱动时代&#xff0c;在市场需求和国家政策的推动下&#xff0c;各地因地制宜发展数字孪生技术&#xff0c;深入开展数字孪生应用建设。今天我们就重点来聊一聊数字孪生技术在工厂中的应用&#xff0c;希望通过本次案例的深度剖析…

深“扒”云原生高性能分布式文件系统JuiceFS

JuiceFS 是一款面向云原生设计的高性能分布式文件系统&#xff0c;在 Apache 2.0 开源协议下发布。提供完备的 POSIX 兼容性&#xff0c;可将几乎所有对象存储接入本地作为海量本地磁盘使用&#xff0c;亦可同时在跨平台、跨地区的不同主机上挂载读写。 JuiceFS 简介 JuiceFS…

测试PHP与MySQL数据库连接查询,新手

创建库 &#xff1a;create database if not exists web; 创建表 &#xff1a; create table if not exists web.students(id int,name varchar(3),age int,birth datetime); 插入数据&#xff1a;insert web.students values (1,"张三",18,now()),(1,"李…

智慧养殖APP及小程序多端跨平台技术选型分析

智慧养殖APP及小程序多端跨平台技术选型分析 1. 框架选择 ------Uniapp------ 优势&#xff1a;使用Vue.js语法&#xff0c;学习成本较低&#xff1b;一套代码&#xff0c;能同时支持APP/H5/小程序&#xff0c;是较为全面的跨平台框架。 ​ 开发小程序的不二选择&#xff0c;…

线性代数——特征值和特征向量

文章目录 版权声明补充知识求和公式的性质常用希腊字符读音 特征值和特征向量相似矩阵相似对角化实对称矩阵 版权声明 本文大部分内容皆来自李永乐老师考研教材和视频课。 补充知识 求和公式的性质 ∑ i 1 n k a i k ∑ i 1 n a i \sum_{i1}^nka_ik\sum_{i1}^na_i i1∑n​…

visual studio 2022换背景遇到的问题

如果要自定义背景图&#xff0c;则可以下载ClaudialIDE 1.在拓展->点击拓展管理->右上角搜索background->点击下载ClaudialIDE->加载完之后需要关闭vs界面进行下载&#xff0c;下载失败&#xff0c;弹出“由于出现以下错误 无法安装一个或多个扩展”。 解决&#x…

推荐几款不错的AI绘画工具

随着近年来数据、算法等核心技术的不断进步&#xff0c;人工智能在内容创作各垂直领域的比例不断增加&#xff0c;包括人工智能写作、人工智能编辑和最近流行的人工智能绘画。 许多朋友也想跟上潮流&#xff0c;使用人工智能绘画生成软件创建人工智能图像&#xff0c;但我不知…