題目:乙個陣列,找乙個數對,使得兩個數對之差最大,並且較大數在較小數之前,要求時間複雜度為o(n)
解決方法:
動態規劃,額外定義兩個陣列,temp、max
temp[i]用來儲存,從開始到下標為i的元素位置,最大數對之差
max[i]用來儲存,從開始到下標為i的元素位置,最大值
i=0時:
temp[i]=0;
max[i]=a[i];
i!=0時:
temp[i+1]=max;
max[i+1]=max;實現**如下:
public class test;
temp=new int [a.length];
max=new int [a.length];
system.out.println(find(a));
} public static int find(int a)else
}}
時間複雜度為:o(n)
空間複雜度為:o(n)
找出乙個陣列裡面前K個最大數
問題 找出乙個陣列裡面前k個最大數。解法 1.第一感覺就是對陣列進行降序全排序,然後返回前k個元素,即是需要的k個最大數。排序演算法的選擇有很多,考慮陣列的無序性,可以考慮選擇快速排序演算法,其平均時間複雜度為o nlogn 具體 實現可以參見相關資料結構與演算法書籍。2.觀察第一種演算法,問題只需...
乙個陣列中找重複數
乙個大小為n的陣列,裡面的數都屬於範圍 0,n 1 有不確定的重複元素,找到至少乙個重複元素,要求o 1 空間和o n 時間。include const int no repeat flag 1 int findrepeatnumberinarray int a,int n return no re...
對乙個陣列排序之後求相鄰數的最大差值
題目 給定乙個整形陣列arr,返回排序後的相鄰兩數的最大差值。時間複雜度為o n 解答 如果用排序法實現,其時間複雜度為o nlogn 而如果利用桶排序的思想 不是桶排序 可以做到o n 額外空間複雜度為o n 遍歷arr找到最大值max和最小值min。如果arr的長度為n,準備n 1個桶,把max...