陣列 最大差值 常見演算法總結 陣列篇

2021-10-14 18:58:26 字數 3489 閱讀 9286

1.給定乙個數值在1-100的整數陣列,請找到其中缺少的數字。

找到丟失的數字 利用byte陣列的1或0標記該數字是否被刪除,例如byte陣列下標為0的數值為1的話,代表數字1存在

public static void findmissnumber1(int ints) 

for (int i = 0; i < i***ist.length; i++) }}

我們可以利用1-100的總和為5050,我們依次減掉資料內的所有值,得到的差值即為刪除的值

public static void findmissnumber2(int ints) 

system.out.println("刪除的數字:" + sum);

}

2.從陣列中找出給定目標數字的兩數組合。例如陣列為,給定數字給17,那麼陣列內的3+14=17。

先利用set儲存對應的數字,然後再遍歷陣列,假設遍歷到數字3的時候,檢查set中是否存在(17-3)=14這個數字,如果存在的話,即存在這個組合。

public static void findpairnumber(int arrays, int target) 

for (int i = 0; i < arrays.length; i++) }}

3.將陣列進行反轉。

只需要將陣列按中間位置為對稱軸進行位置交換即可

public static void reversearray(int arrays) 

}

4.尋找陣列中前k個最大的數。

我們新建乙個長度為k的陣列,遍歷原陣列,然後將大於k陣列內的數字,放進k陣列裡,然後冒泡淘汰末尾的數字,最後剩下的就是前k個最大的數字。

public static int findkmaxints(int k, int ints) 

// 再進行冒泡

bulb(kints);

}return kints;

}public static void bulb(int ints) }}

5.求乙個陣列中連續子向量的最大和

遍歷陣列,從第乙個大於0的數字開始累加,儲存最大值,如果累加後的值小於等於0的話,就拋這一下標,從下乙個下標開始累積,如果超過之前的最大值的話就進行替換。使用sum和max變數進行操作

public static integer findmaxsum(int ints) 

int currentsum = 0;

int maxsum = 0;

for (int i = 0; i < ints.length; i++)

if (currentsum > maxsum)

}return maxsum;

}

6.乙個陣列中數字都兩兩重複,只有乙個數字沒有重複,如何找到那個數字?

我們可以將所有數字進行異或,兩兩重複的數字,都會被抵消掉,剩餘最後的數字就是單個不重複的數字

public static integer findsinglenumber(int ints) 

int singlenumber = ints[0];

for (int i = 1; i < ints.length; i++)

return singlenumber;

}

7.將乙個二維陣列順時針旋轉90度.

先找出旋轉90度,下標的變換規律。然後從外圈向內圈遞迴旋轉變換。

public static void rollmatrix90(int matrix, int circle) 

int bound = matrix.length - circle - 1;

for (int i = circle; i < matrix.length - 1 - circle; i++)

rollmatrix90(matrix, circle + 1);

}

原陣列

1,2,3,4,5,

6,7,8,9,10,

11,12,13,14,15,

16,17,18,19,20,

21,22,23,24,25,

翻轉後的陣列

21,16,11,6,1,

22,17,12,7,2,

23,18,13,8,3,

24,19,14,9,4,

25,20,15,10,5,

8.找出陣列的中位數。

使用快排的思想,但是只往中間位置進行排序,當最後的排序下標抵達陣列中間位置的時,就是中位數。

public static int findmiddlenumber(int array, int begin, int end) 

// 選擇begin位置的數字作為分界點

int splitnumber = array[begin];

while (begin + 1 < end)

if (array[end] > splitnumber)

int tmp = array[begin + 1];

array[begin + 1] = array[end];

array[end] = tmp;

}int tmp = array[beginrange];

array[beginrange] = array[begin];

array[begin] = tmp;

if (begin > array.length / 2) else

}

9.兩個有序陣列的合併排序

同時遍歷兩個陣列,每次對比兩個陣列當前座標的值哪個小,小的存入新的陣列,陣列下表往後移一位,大的那邊座標不變,繼續下次大小對比。依次迴圈。

陣列中的最大差值

有乙個長為n的陣列a,求滿足0 a b給定陣列 a及它的大小 n,請返回最大差值。解析 貪心思想,時間複雜度為o n 設定當前陣列中的最小值為min value。初始化為arr 0 然後依次遍歷陣列中的每乙個元素,當遍歷到乙個元素時求出當前元素與之前的min value差值,用該差值和當前最大的差值...

陣列 最大差值 演算法打卡 最大間距

難度 困難 題目 給定乙個無序的陣列,找出陣列在排序之後,相鄰元素之間最大的差值。如果陣列元素個數小於 2,則返回 0。思考 這個題目夠短了吧?但是難度是困難 跟看到長題目不要慌同樣重要的事,看到難度是困難也不要慌!這個看著也不是很難嘛,就是找出每兩個數之間的距離,最大距離!思路 因為陣列是亂序的,...

無序陣列求最大差值

乙個陣列a 0.n 1 求a j a i 的最大值,其中icite 第一種方法 從左往右求下標0到 k 1 的最小值min 從右往左求 下標k到n 1 的最大值max,對於每個k都有乙個max min的值,最後求這個值的最大值即可。例如陣列 4 5 2 6 3 1 k 1 2 3 4 5 min 4...