力扣:数组篇

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]; 。

感悟:

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

5、螺旋矩阵 II

class Solution:def generateMatrix(self, n: int) -> List[List[int]]:number = nloop = n//2start_x, start_y = 0, 0 # 当前所在的行与列now = 0result = [[0]*n for _ in range(0,n)]i,j = 0,0 # 行列中的前进脚步flag = 1while(now < loop):while(j-now < n-1): # ➡result[start_x][j] = flagj += 1flag += 1start_y = jwhile(i-now < n-1): # ⬇result[i][start_y] = flagi += 1flag += 1start_x = iwhile(j > now): # ⬅result[start_x][j] = flagj -= 1flag += 1start_y = jwhile(i > now): # ⬆result[i][start_y] = flagi -= 1flag += 1now += 1start_x, start_y = now, nowi, j = now, nown = n-2if number%2 == 1:result[loop][loop] = number*numberreturn result

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

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

相关文章

风控系统指标计算/特征提取分析与实现01,Redis、Zset、模版方法

个人博客&#xff1a;无奈何杨&#xff08;wnhyang&#xff09; 个人语雀&#xff1a;wnhyang 共享语雀&#xff1a;在线知识共享 Github&#xff1a;wnhyang - Overview 引用AI对于风控系统的介绍 风控系统是一种用于在线业务的安全管理系统&#xff0c;它帮助企业和平台防…

3.2 Beautiful Soup 的使用

目录 一、Beautiful Soup 的简介 二、解析器 三、基本使用 四、节点选择器 1 选择元素 2 获取名称、属性、文本内容 五、方法选择器 1 find_all 传入 name 节点名 传入 attrs 属性 传入 text 2 find 六、CSS 选择器 1 实例 2 获取属性 3 获取文本 七、结语 一…

HSCCTF-2024-Crypto 复现

文章目录 EZ_MATHSTAR_CHASING_DIARYRSATESTYOUQU 复现参考来源&#xff1a; lazzzaro佬写的题解 EZ_MATH 题目描述&#xff1a; from Crypto.Util.number import *flag HSCCTF{*****************************************} x bytes_to_long(flag.encode()) y getPrime(2…

蓝桥杯第三期模拟赛(java版)

&#x1f4d1;前言 本文主要是【蓝桥杯第三期练习题】的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304;每日一句&#x…

Java17 --- SpringCloud之Consul

目录 一、consul的使用 1.1、主要功能 1.2、安装及运行 1.3、添加微服务到consul 1.3.1、8001微服务添加相关pom、配置文件、注解 1.3.2、80微服务添加相关pom、配置文件、注解 1.4、三个注册中心异同 1.5、consul进行分布式配置 1.5.1、修改8001的yml配置文件 1.5.2…

map、set模拟(底层封装红黑树)

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 前言 前面我们对红黑树进行了模拟实现&#xff1a; 现在我们将使用我们模拟的map和set对我们模拟的红黑树进行封装。 并且&#xff0c;本篇将增加红黑树的迭代器&#xff0c;模拟迭代器&#xff08;这里理解原理即可&…

重建大师模型构建精细网格失败是什么原因导致的呢?(如下图)

出现图中的报错一般是显存溢出、瓦块过大造成的。 重建大师是一款专为超大规模实景三维数据生产而设计的集群并行处理软件&#xff0c;输入倾斜照片&#xff0c;激光点云&#xff0c;POS信息及像控点&#xff0c;输出高精度彩色网格模型&#xff0c;可一键完成空三、自动建模和…

flex弹性盒子实现左中右居中布局

1、效果展示 2、布局与样式 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>测试弹性盒子</title> </head> <body> <div class"out-parent"><div class"…

计算机网络 —— 运输层

运输层 5.1 运输层概述 运输层的主要任务是&#xff0c;如何为运行在不同主机上的应用进程提供直接的通信服务。运输层协议又称为端到端协议。 根据应用需求的不同&#xff0c;因特网的运输层为应用层提供了两种不同的运输协议&#xff0c;即面向连接的TCP和无连接的UDP 5.2…

Vant中<van-button>中icon的位置设置

一般在<van-button>按钮中加入icon&#xff0c;其位置都在左侧 我们可以用&#xff1a;van-position&#xff0c;改变图标展示位置 如&#xff1a;icon-position"right"

【30天】Python从入门到精通详解版—第一天—Python编程语言简介

Python编程语言简介 Python 简介Python 发展历史Python 特点Python 环境搭建Python下载Python安装环境变量配置在 Unix/Linux 设置环境变量在 Windows 设置环境变量 运行Python Python 简介 Python是一种高级编程语言&#xff0c;由Guido van Rossum于1989年底发明。Python在设…

React入门 学习全记录(适合和我一样有Vue经验想学习react的同学~)

前端目前的三大框架&#xff1a;Vue、React、Angular比较 都采用了组件化开发的方式&#xff0c;都是基于MVVM的框架有着虚拟DOM&#xff0c;Vue 和 Angular 都采用了响应式设计的方式&#xff0c;当数据发生变化时会自动更新视图。React 和 Angular 的复杂性也使得它们更加适…