青铜挑战——爱不起的数组
线性表
具有相同特征数据元素的一个有限序列,其中所含元素的个数称为线性表的长度。
数组
数组是元素紧密连接在一起的序列,是线性表最基本的结构,在内存中是连续存储的,每个元素占用相同的大小。
数组的基本操作
数组的创建和初始化
创建数组:
int[] arr = new int[10];
初始化数组:
for(int i = 0; i < arr.length; i++) {
arr[i] = i;
}
int[] arr = new int[]{0, 1, 2, 3, 5, 6, 8};
查找元素
public static int findByElement(int[] arr, int size, int key) {
for(int i = 0; i < size; i++) {
if(arr[i] == key) {
return i;
}
}
return -1;
}
简单的,遍历直接比较值就可以了。
添加元素
public static int addByElementSequence(int[] arr, int size, int element) {
// 超出长度了直接返回
if(size >= arr.length) {
return -1;
}
int index = size;
// 找出要插入的位置
for(int i = 0; i < size; i++) {
if(element < arr[i]) {
index = i;
break;
}
}
// 往后移动一个位置
for(int j = size; j > index; i--) {
arr[j] = arr[j - 1];
}
arr[index] = element; // 插入数据
return index;
}
注意这里的 size 是从1 开始的
删除一个元素
public int removeByElement(int[] arr, int size, int key) {
int index = -1;
for(int i = 0; i < size; i++) {
if(arr[i] == key) {
index = i;
break;
}
}
// 可能会出现找不到的情况
if(index != -1) {
for (int i = index + 1; i < size; i++) {
// 直接覆盖即可
arr[i - 1] = arr[i];
}
size--;
}
return size;
}
热身题目
链接:896. 单调数列
public boolean isMonotonic(int[] nums) {
boolean inc = true, dec = true;
int n = nums.length;
for(int i = 0; i < n - 1; ++i) {
if(nums[i] > nums[i + 1]) {
inc = false;
}
if(nums[i] < nums[i + 1]) {
dec = false;
}
}
return inc || dec;
}
这里简化了一下,用一个循环来判断递增或者递减的情况。