1.?創(chuàng)建數(shù)組
//第一種創(chuàng)建和初始化的方法
int[] arr = new int[10];
//第二種創(chuàng)建和初始化的方法
int[] arr2 = new int[]{0, 1, 2, 3, 5, 6, 8};
System.out.println("arr2:" + Arrays.toString(arr2));
//第二種方式的簡化版本:
int[] arr3 = {2, 5, 0, 4, 6, -10};
System.out.println("arr3" + Arrays.toString(arr3));
2.?查找一個元素
找到目標(biāo)位置
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;
}
3.?插入一個元素
先找到目標(biāo)位置,再后移插入
public static int add(int[] arr, int size, int element) {
//size和arr.length都表示元素的數(shù)量,都是從1開始編號
if (size >= arr.length)
throw new IllegalArgumentException("Add failed. Array is full.");
int index = size;
for(int i = 0;i<size;i++){
if (element<arr[i]){
index = i;
break;
}
}
for(int i = size;i>index;i--){
arr[i] = arr[i-1];
}
arr[index] = element;
return index;
}
也可以邊遍歷邊移動元素
public static int add(int[] arr, int size, int element) {
//size和arr.length都表示元素的數(shù)量,都是從1開始編號
if (size >= arr.length)
throw new IllegalArgumentException("Add failed. Array is full.");
int i;
for(i = size;i>0;i--){
if (element<arr[i-1]){
arr[i] = arr[i-1];
}else {
arr[i] = element;
return i;
}
}
arr[i] = element;
return i;
}
4.刪除一個元素
先找到目標(biāo)位置,再覆蓋
public static 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;
}
}
size--;
if (index != -1) {
// for (int i = index + 1; i < size; i++)
// arr[i - 1] = arr[i];
// size--;
for (int i = index;i<size;i++){
arr[i] = arr[i+1];
}
}
return size;
}
5.?題目:判斷單調(diào)數(shù)組
?思路:
題目提示已經(jīng)很清楚,只需循環(huán)兩次分別判斷是不是遞增或者遞減的,都不是就返回false。
也可以只遍歷一次,當(dāng)一次循環(huán)中既遇到遞增又遇到遞減情況就返回false。
class Solution {
public boolean isMonotonic(int[] nums) {
boolean isIncreasing = true;
boolean isDeclining = true;
for(int i = 1;i<nums.length;i++){
if(nums[i]>=nums[i-1]){
continue;
}else{
isIncreasing = false;
}
}
for(int i = 1;i<nums.length;i++){
if(nums[i]<=nums[i-1]){
continue;
}else{
isDeclining = false;
}
}
return isDeclining|isIncreasing;
}
}
6.?題目:合并兩個有序數(shù)組?
思路:
(1)直接將B數(shù)組拼接到A數(shù)組后面,然后排序,但是這樣不符合面試官出題考察點(diǎn)
(2)新建一個數(shù)組C,然后依次有序插入,有待優(yōu)化空間文章來源:http://www.zghlxwxcb.cn/news/detail-654027.html
(3)從小往大判斷,依次將元素后移,但是這樣時間復(fù)雜度不夠好,思考有沒有什么優(yōu)化的方法,想A數(shù)組后面是無元素空著的能不能從后面插入,自然就想到從大往小插入。文章來源地址http://www.zghlxwxcb.cn/news/detail-654027.html
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int i = m+n -1;
for(;i>=0&&n != 0&&m!=0;i--){
if(nums1[m-1] >= nums2[n-1]){
nums1[i] = nums1[m-1];
m--;
}else{
nums1[i] = nums2[n-1];
n--;
}
}
while(n>0){
nums1[i--] = nums2[--n];
}
}
}
到了這里,關(guān)于算法通關(guān)村第3關(guān)【青銅】| 不簡單的數(shù)組增刪改查的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!