LeetCode通关:数组十七连,真是不简单
分门别类刷算法,坚持,进步!
大家好,我是老三,一个刷题困难户,接下来我们开始数组类型算法的刷题之旅!
数组基础
数组基本上是我们最熟悉的数据结构了,刚会写“Hello World”不久,接着就是“杨辉三角”之类的练习。
数组基本结构
- 数组是存放在连续内存空间上的相同类型数据的集合
上图是一个字符数组的例子。
因为内存空间连续,所以可以直接通过下标获取对应的元素。
但是删除就麻烦一点,相当于填坑,一个元素被移走,留下的坑,需要其它元素来填上。
在Java中,多维数组的存储本质上也是一个行优先的一维数组。
数组是引用传递
我们都知道,在Java中的 “=” 用在基本数据类型上,是值传递,用在引用数据类型上,是引用传递。
这一块展开可以写一篇文章,我们只简单看个例子:
public class ArrayTest {
public static void main(String[] args) {
int[] array = {1, 2, 3};
int[] newArray = array;
newArray[1] = 0;
//结果: 1 0 3
printArray(array);
//结果: 1 0 3
printArray(newArray);
}
static void printArray(int[] data) {
for (int d : data) {
System.out.print(d + " ");
}
System.out.println();
}
}
大家可以看到,newArray改变了,array也跟着变了。
为什么呢?
在Java中,数组是引用数组类型。array、newArray都是存储在栈中的引用,它们指向堆中真正存储的数组对象。
所以改变了newArray,实际是改变了newArray指向的数组。
这一点是我们刷题需要注意的,复制数组需要在循环中一个个复制。
好了,接下来,让我们愉快地开始刷题吧!
二分查找
LeetCode704. 二分查找
☕ 题目:704. 二分查找 (https://leetcode-cn.com/problems/binary-search/)
❓ 难度:简单