数组理论基础
文章链接:数组理论基础
- 定义:数组是存放在连续内存空间上的相同类型数据的集合
- 数组特征:
- 在存储空间中按顺序存储、地址连续
- 数组下标从0开始,数组元素默认值为0,数组引用默认值为null
- 支持随机访问、查询效率高(注:java没有指针,数组的寻址操作完全由虚拟机操作,不对外暴露)
- 随机删除或随机插入有点麻烦、需要移动其他的0到n个数组元素
- 数组的元素不能删除,只能覆盖
- 很多数据结构都是利用数组演变而来的
算法题目
704. 二分查找
题目链接 给定一个 n
个元素有序的(升序)整型数组 nums
和一个目标值 target
,写一个函数搜索 nums
中的 target
,如果目标值存在返回下标,否则返回 -1
。
这个题目第三刷不看题解的思路:
- 判断target在不在有序数组的数值区间内(最小最大值已知)
- 确定是左闭右闭还是左闭右开(重要)
体会:第一次运行失败,对左闭右开和左闭右闭的代码细节又重新温习了一遍
待办:抽空把34和35刷了
27.移除元素
题目链接 给你一个数组 nums
和一个值 val
,你需要 原地 移除所有数值等于 val
的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1)
额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
这个题目第三刷不看题解的思路:
- 之前没有试过暴力解法,这次试一下:第一遍for循环遍历数组元素,如果等于目标值则进入第二个for循环更新元素
- 快慢指针法回忆的时候有偏差、模糊;需要再看一遍…
体会:
- 暴力解法要注意第二层for循环元素后,第一层的i要往前挪移一位挪到未进行比较的位置
- 注意总结复习解题思路,争取熟练使用快慢指针