leetcode下的Java学习(一)—— 数组

一维数组

创建数组

两种常用方式:

  • 初始化固定大小的数组,后再重新赋值。若不重新赋值,则数组中元素值为对应dataType的默认值。

dataType[] array = new dataType[size];
array[0] = value0;
array[1] = value1;
……
array[size-1] = value;
  • 创建时赋值
dataType[] array = {value0, value1, ……, valuek };

读取第i个元素

dataType[] var = array[i];

获取数组长度

int len = array.length;

遍历数组

  • for循环
forint i = 0; i < array.lenght; i++{
	system.out.println(array[i]);
}
  • for-each循环
for (int i : array){
	system.out.println(i);
}

数组作为参数传入/返回值返回

public static int[] reverse(int[] list) {
  int[] result = new int[list.length];
 
  for (int i = 0, j = result.length - 1; i < list.length; i++, j--) {
    result[j] = list[i];
  }
  return result;
}

int[] arrayResult = reverse(new int[]{1, 2, 3, 4, 5});

二维数组

创建数组

  • 直接为每一维分配空间
dataType[][] array = new dataType[rowLength][columnLength];
  • 从最高维开始,分别为每一维分配空间
dataType[][] array = new dataType[rowLength][];
array[0] = new dataType[2];
array[1] = new dataType[3];
array[0][0] = new dataType(value0);
array[0][1] = new dataType(value1);

获取行号和列号

int row = array.length;
int column = array[0].length;

遍历

  • 按行遍历
for (int i = 0; i < row; i++){
	for (int j = 0; j < column; j++){
		system.out.println(array[i][j]);
	}
}
  • 按列遍历
for (int i = 0; i < column; i++){
	for (int j = 0; j < row; j++){
		system.out.println(array[i][j]);
	}
}

Arrays 类

java.util.Arrays 类能方便地操作数组,它提供的所有查找排序等方法都是静态的。

数组间比较

如果两个数组以相同顺序包含相同的元素,则返回true,否则false。

Arrays.equals(array1, array2);

数组转字符串

Arrays.toString(array1);

按升序排序

Arrays.sort(array1);

二分法查找定值对象

能对排序好的数组进行二分查找法操作。若查找到,返回查找值索引;若未查找到,返回- 1 (插入点) 。

Arrays.binarySearch(array1, value1);

示例

int[] array1 = {1, 25, 17, 31, 48};
int[] array2 = {25, 48, 1, 17, 31};
System.out.println("array1和array2是否相等:"+ Arrays.equals(array1, array2)); // 判断是否相等
System.out.println("array1:" + Arrays.toString(array1)); //数组转字符串
Arrays.sort(array1);  //排序
System.out.println("array1排序后:" + Arrays.toString(array1));
System.out.println("array1中值17的索引:" + Arrays.binarySearch(array1, 17));  // 二分法查索引
System.out.println("array1中值3的索引:" + Arrays.binarySearch(array1, 3));  //-插入点-1

输出

array1和array2是否相等:false
array1:[1, 25, 17, 31, 48]
array1排序后:[1, 17, 25, 31, 48]
array1中值17的索引:1
array1中值3的索引:-2

双指针应用

情景一:从两端向中间迭代数组

一个指针从头部开始,而另一个指针从尾部开始。

情景二:原地修改数组

  • 使用快慢指针的指针来解决问题。
  • 两个指针的运动方向是相同的。

其他

在做题过程中,我发现大多数是对int类型数组操作,可能会用到一些Math类中方法,大概这几种:

  • Math.min(value1, value2) 返回两个参数中的最小值。
  • Math.max(value1, value2) 返回两个参数中的最大值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值