力扣:数组篇

1、数组理论基础

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

需要两点注意的是

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

因为数组的在内存空间的地址是连续的,所以我们在删除或者增添元素的时候,就难免要移动其他元素的地址。

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

二维数组在内存的空间地址是连续的么?

不同编程语言的内存管理是不一样的,以C++为例,在C++中二维数组是连续分布的。

2、二分查找

二分法的前提条件

  • 有序数组
  • 数组中无重复元素

二分法的两种写法

(1)定义 target 是在一个在左闭右闭的区间里,也就是[left, right]。

  • while (left <= right) 要使用 <= ,因为left == right是有意义的,所以使用 <=
  • if (nums[middle] > target) right 要赋值为 middle - 1,因为当前这个nums[middle]一定不是target,那么接下来要查找的左区间结束下标位置就是 middle - 1

(2)定义 target 是在一个在左闭右开的区间里,也就是[left, right) 。

  • while (left < right),这里使用 < ,因为left == right在区间[left, right)是没有意义的
  • if (nums[middle] > target) right 更新为 middle,因为当前nums[middle]不等于target,去左区间继续寻找,而寻找区间是左闭右开区间,所以right更新为middle,即:下一个查询区间不会去比较nums[middle]

3、移除元素

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

双指针法(快慢指针法): 通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。

定义快慢指针

  • 快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组
  • 慢指针:指向更新 新数组下标的位置

很多同学这道题目做的很懵,就是不理解 快慢指针究竟都是什么含义,所以一定要明确含义,后面的思路就更容易理解了。

4、有序数组的平方

数组是有序的, 只不过负数平方之后可能成为最大数了。

那么数组平方的最大值就在数组的两端,不是最左边就是最右边,不可能是中间。

此时可以考虑双指针法了,i指向起始位置,j指向终止位置。

定义一个新数组result,和A数组一样的大小,让k指向result数组终止位置。

如果A[i] * A[i] < A[j] * A[j] 那么result[k--] = A[j] * A[j]; 。

如果A[i] * A[i] >= A[j] * A[j] 那么result[k--] = A[i] * A[i]; 。

感悟:

  • 拿到数组,先找数值分布是否有规律,如果有规律,可以先从规律下手;
  • 如果返回的数组大小是已知的,可以先定义并初始化好,后面修改里面的值就行。

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

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

相关文章

centos7迁移龙蜥anolis8.8报错

1、报错 UPGRADE INHIBITED Upgrade has been inhibited due to the following problems:1. Inhibitor: Possible problems with remote login using root account#解决 sed -i s/#PermitRootLogin yes/PermitRootLogin yes/g /etc/ssh/sshd_configgrep…

【你也能从零基础学会网站开发】Web建站之javascript入门篇 JavaScript中的表达式、运算符、位运算、递增递减

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;web开发者、设计师、技术分享 &#x1f40b; 希望大家多多支持, 我们一起学习和进步&#xff01; &#x1f3c5; 欢迎评论 ❤️点赞&#x1f4ac;评论 &#x1f4c2;收藏 &#x1f4c2;加关注 JavaScript…

kali当中不同的python版本切换(超简单)

kali当中本身就是自带两个python版本的 配置 update-alternatives --install /usr/bin/python python /usr/bin/python2 100 update-alternatives --install /usr/bin/python python /usr/bin/python3 150 切换版本 update-alternatives --config python 0 1 2编号选择一个即可…

【MySQL篇】 MySQL基础学习

文章目录 前言基础数据类型DDL数据库操作查询数据库创建数据库删除数据库使用数据库 DDL表操作创建表查询表修改表删除 DML-增删改添加数据更改数据删除数据 DQL-查询基础查询条件查询聚合函数分组查询排序查询分页查询编写顺序 DML-用户及权限用户管理权限控制 函数字符串函数…

挑战杯 基于设深度学习的人脸性别年龄识别系统

文章目录 0 前言1 课题描述2 实现效果3 算法实现原理3.1 数据集3.2 深度学习识别算法3.3 特征提取主干网络3.4 总体实现流程 4 具体实现4.1 预训练数据格式4.2 部分实现代码 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习机器视觉的…

【Frida实战】浅析Java层静态方法与实例方法的Hook技术及其应用

引言* 在移动安全研究领域&#xff0c;动态代码插桩工具Frida以其强大的功能和灵活的特性深受广大研究人员喜爱。本文将聚焦Frida在Java层面上对静态方法和实例方法的Hook过程&#xff0c;通过一个具体的Android应用示例&#xff0c;详细介绍其Hook原理和操作步骤。 Hook静态…

浅谈2024 年 AI 辅助研发趋势!

目录 ​编辑 引言 一、AI辅助研发现状 1. 技术发展 2. 工具集成 3. 应用场景 二、AI辅助研发趋势 1. 更高的自动化程度 2. 更高的智能化程度 3. 更多的领域应用 4. 更高的重视度 三、结论 四. 完结散花 悟已往之不谏&#xff0c;知来者犹可追 创作不易&#xff…

业务场景: arraylist我有1000条数据我现在要往每条数据后面加一个123,除了循环添加还有什么方法?

在Java中&#xff0c;如果您有一个ArrayList包含1000条数据&#xff0c;并且想要往每条数据后面添加一个固定的字符串&#xff08;比如"123"&#xff09;&#xff0c;那么循环遍历这个列表并逐个修改元素是最直接的方法。不过&#xff0c;如果您想要避免显式的for循环…

Golang 方法的接收器 receiver 指针和值的区别

一、如果receiver是指针类型 package mainimport "fmt"type Count struct {count int }func main() {c : Count{count: 0}c.incr()fmt.Println(c.count)c2 : &cc2.incr()fmt.Println(c2.count) }func (c *Count) incr() {c.count }//打印结果 1 2 incr 方法的 …

Windows系统Starting the Docker Engine 一直转圈解决方法

Windows系统Starting the Docker Engine 一直转圈解决方法 – 蓝队云 docker初始化安装时的WSL两个问题_unexpected wsl error-CSDN博客 docker desktop 因为某些原因无法打开报错wsl_docker desktop something went wrong-CSDN博客

【金三银四】刷刷八股吧,准备新的一周的到来

目录 前言1、Java中和equals有什么区别&#xff1f;2、String, StringBuffer, StringBuilder区别3、项目中对泛型的使用4、运行时数据区是怎样的&#xff1f;线程安全&#xff08;即线程私有&#xff09;的有哪些&#xff1f;5、对象实例、类信息、常量、静态变量分别在运行时数…

(南京观海微电子)——I3C协议介绍

特点 两线制总线&#xff1a;I2C仅使用两条线——串行数据线&#xff08;SDA&#xff09;和串行时钟线&#xff08;SCL&#xff09;进行通信&#xff0c;有效降低了连接复杂性。多主多从设备支持&#xff1a;I2C支持多个主设备和多个从设备连接到同一总线上。每个设备都有唯一…

题目 2036: 散列存储

题目描述: 给出了几个长度为n(n<20)的全排列&#xff0c;求某个全排列是否在上述的位置出现过。 代码: package lanqiao;import java.util.*;public class Main{public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();int m …

Python脚本,用于从MagicEden和HowRare API获取指定集合的拍卖列表和稀有度信息,并计算每个NFT的稀有度价格

一个Python脚本,用于从MagicEden和HowRare API获取给定集合的拍卖列表和稀有度信息,并计算每个NFT的稀有度价格。 代码的主要功能如下: 1. 导入所需的模块:`sys`,`time`,`requests`。 2. 定义了一个延迟时间`delay`,用于在每个API请求之间添加一定的延迟。 3. 定义了一个…

Mac安装oh-my-zsh

目录 命令下载 卸载命令 注意 命令下载 curl -L https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh | sh 卸载命令 uninstall_oh_my_zsh 注意 终端init的时候并不会执行~/.bash_profile、~/.bashrc等脚本了&#xff0c; 这是因为其默认启动执行脚本…

017-$route、$router

$route、$router 1、$route2、$router 1、$route $route 对象表示当前的路由信息&#xff0c;包含了当前 URL 解析得到的信息。包含当前的路径&#xff0c;参数&#xff0c;query对象等。 使用场景&#xff1a; 获取路由传参&#xff1a;this.$route.query、this.$route.par…

C语言---位运算符练习(二)---单身狗问题

C语言—位运算符练习(二)—单身狗问题 文章目录 前言一、单身狗问题&#xff08;1&#xff09;1.题目2.思路3.参考代码 二、单身狗问题&#xff08;2&#xff09;1.题目2.思路3.代码的实现 前言 上一篇博客&#xff0c;我们留了一个思考题—单身狗问题&#xff0c;下面咱们对这…

【布局:1688,阿里海外的新筹码?】1688重新布局跨境海外市场:第一步开放1688API数据采集接口

2023年底&#xff0c;阿里巴巴“古早”业务1688突然成为“重头戏”&#xff0c;尤其宣布正式布局跨境业务的消息&#xff0c;一度引发电商圈讨论。1688重新布局跨境海外市场&#xff1a;第一步开放1688API数据采集接口 2023年11月中旬&#xff0c;阿里财报分析师电话会上&…

VUE——v-cloak指令

VUE——v-cloak指令 属性选择器&#xff0c;可以控制vue实例化完成前的dom样式 功能&#xff1a;利用vue实例化后v-cloak属性会消失&#xff0c;设置其样式 官网介绍 没用前效果&#xff1a;当vue没渲染完前&#xff0c;界面效果会看到{{aboutCloak}}字符&#xff0c;影响用户…

【万题详解】DFS搜索专题合集(中)

课前C小程序&#xff08;关机&#xff0c;休眠&#xff0c;注销程序&#xff09; 有的时候我们需要让电脑在一段时间工作而不能关机&#xff0c;但是工作完成之后不关机会造成用电浪费&#xff0c;那么使用自动关机命令&#xff0c;就不用担心电脑一直开着会浪费电啦。夜里看电…