编程导航算法村第三关 | 青铜挑战
数据的基本操作
查找指定元素
public static int finElmenet(int[] arrya, int size, int key) {
for (int i = 0; i < size; i++) {
if (arrya[i] == key) {
return i;
}
}
return -1;
}
插入元素
- size代表现在此数组的长度,数据的可访问的最后一个元素下标是size-1
public static int addElement(int[] arrys, int size, int key) {
if (size >= arrys.length) {
return -1;
}
int index = size;
int i;
for (i = 0; i < size; i++) {
if (arrys[i] >= key) {
index = i;
break;
}
}
for (int j = size; j > index; j--) {
arrys[j] = arrys[j - 1];
}
arrys[index] = key;
return index;
}
删除元素
- 先找到待删除元素的位置index
- 从index开始,后一个元素赋值给前一个元素,最后一个元素应该是size-1
public static int removeElement(int[] arrays, int size, int key) {
int index = -1;
for (int i = 0; i < size; i++) {
if (arrays[i] == key) {
index = i;
break;
}
}
if (index != -1) {
for (int i = index; i < size - 1; i++) {
arrays[i] = arrays[i + 1];
}
return index;
}
return -1;
}
LeetCode 839 是否是单调数组
- 如果对于所有 i <= j,nums[i] <= nums[j],那么数组 nums 是单调递增的。 如果对于所有 i <= j,nums[i]> = nums[j],那么数组 nums 是单调递减的。
public boolean isMonotonic(int[] nums) {
boolean isinsrease = true;
boolean isreduce = true;
for (int i = 0; i < nums.length - 1; i++) {
if (nums[i] > nums[i + 1]) {
isinsrease = false;
}
if (nums[i] < nums[i + 1]) {
isreduce = false;
}
}
return isinsrease || isreduce;
}
数组合并(Leetcode 88)
- 从后往前寻找最大的元素,并入到新数组中,直到有一个数组合并完成
- 将未完成合并的一个数据的元素加入到新数组中
public void merge(int[] nums1, int m, int[] nums2, int n) {
int i = m + n - 1;
int n1 = m - 1;
int n2 = n - 1;
while (n1 >= 0 && n2 >= 0) {
if (nums1[n1] >= nums2[n2]) {
nums1[i] = nums1[n1];
i--;
n1--;
if (n1 == -1) {
break;
}
}
if (nums1[n1] <= nums2[n2]) {
nums1[i] = nums2[n2];
i--;
n2--;
}
}
while (n1 != -1) {
nums1[i] = nums1[n1];
i--;
n1--;
}
while (n2 != -1) {
nums1[i] = nums2[n2];
i--;
n2--;
}
}