給定陣列中找到最大的兩個數
1.在一個給定陣列中找到最大的兩個數。
思路:用max,max2存較大的數。注意,每次從max和max2中較小的一個數,和陣列中的元素比較。以下演算法時間複雜度為O(n)
public int[] getMaxTwo2(int[] a){
int max=Integer.MIN_VALUE;
int max2=Integer.MIN_VALUE;
for(int i=0;i<a.length;i++){
if(max<=max2){
if(a[i]>max){
max=a[i];
}
}
else{
if(a[i]>max2){
max2=a[i];
}
}
}
int b[]={max,max2};
return b;
}
2.在給定的陣列中找最大的K個數。
解題思路:1)陣列先排序,再找最大的k個數。則時間複雜度為nlogn+k 約等於O(nlogn)
2)直接遍歷陣列,找到最大的元素後,加入set.找到第一個最大元素。再遍歷陣列,如果陣列中的元素已經在Set中(時間複雜度為O(1)),則跳過。否則看是否要更新當前的最大元素。所以總的時間複雜度為n+(n+n1)(k-1)=n*(2k-1) 即O(nk)
所以如果nlogn>nk,則用第二種辦法,否則優先排序,再找倒數K個。log2N=logeN/loge2,logeN代表以e為底的N的對數,loge2代表以e為底的2的對數
public Set getMaxK(int[] a,int k){
int n=a.length;
Set<Integer> set=new HashSet<>();
System.out.println(Math.log(n));
if(Math.log(n)/Math.log(2)>k){
//int max=Integer.MIN_VALUE;
// for(int i=0;i<a.length;i++){
// if(a[i]>max){
// max=a[i];
// }
// }
// set.add(max);
for(int m=0;m<k;m++){{
int max2=Integer.MIN_VALUE;
for(int j=0;j<a.length;j++){
if(set.contains(a[j])){
continue;
}
else{
if(a[j]>max2){
max2=a[j];
}
}
}
set.add(max2);
}
}
else{
System.out.println("sort first");
Arrays.sort(a);
for(int l=a.length-1;l>=n-k;l--){
set.add(a[l]);
}
}
return set;
}
相關文章
- python實現給定一個數和陣列,求陣列中兩數之和為給定的數Python陣列
- 如何從整數陣列中找到最大和最小數陣列
- 給定一個整數陣列,找出總和最大的連續數列,並返回總和。陣列
- 在一個給定的陣列中查詢陣列中的最大元素是否至少是陣列中每個其他數字的兩倍, 如果是,則返回最大元素的索引,否則返回-1。陣列索引
- 尋找陣列中和為定值的兩個數陣列
- 【遞迴打卡1】在兩個長度相等的排序陣列中找到上中位數遞迴排序陣列
- 返回陣列中的最大元素個數陣列
- 兩個有序陣列的中位數陣列
- 陣列1——求一個陣列的最大子陣列陣列
- 面試題:給定陣列a,找到最大的j-i, 使a[j]>a[i]面試題陣列
- 給定一個整數陣列 nums 和一個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。陣列
- 尋找兩個有序陣列的中位數陣列
- 4. 兩個排序陣列的中位數排序陣列
- [程式猿面試題精選100題]10.排序陣列中和為給定值的兩個數字面試題排序陣列
- 給定兩個大小為 m 和 n 的正序(從小到大)陣列 nums1 和 nums2。請你找出並返回這兩個正序陣列的中位數。陣列
- 【質數判斷】給定兩個數,判斷這兩個數是否互質?
- 演算法-兩個排序陣列的中位數演算法排序陣列
- 給定一個大小為 n 的陣列,找到其中的眾數。眾數是指在陣列中出現次數大於 ⌊ n/2 ⌋ 的元素。陣列
- 2022-06-23:給定一個非負陣列,任意選擇數字,使累加和最大且為7的倍數,返回最大累加和陣列
- 給出分數陣列,得到對應的名次陣列陣列
- 陣列中出現兩次的數陣列
- 【簡單演算法】1.兩數之和,給定整數陣列和目標值,找出陣列中2數之和等於目標值的元素演算法陣列
- 將一個陣列賦值給另外一個陣列陣列賦值
- 給定一個排序陣列和一個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。排序陣列索引
- 尋找兩個正序陣列中的中位數陣列
- LeetCode-兩個排序陣列的中位數LeetCode排序陣列
- 《劍指offer》:[41]陣列中和為S的兩個數陣列
- [Python手撕]兩個升序陣列的中位數Python陣列
- 陣列中查詢給定值陣列
- 計算給定兩個日期之間的工作日個數
- 演算法陣列中降序數列的最大長度演算法陣列
- 陣列中的第K個最大元素陣列
- Leetcode 陣列中和為給定值的最長子陣列LeetCode陣列
- 給出一個由[-100,100]之間整陣列成的陣列,求其相加和最大的連續子陣列 輸入 一個連續整陣列成的陣列 輸出 子陣列相加的最大值 樣例輸入 -......陣列
- 在其它數都出現k次的陣列中找到只出現一次的數陣列
- 兩個有序陣列如何合併成一個有序陣列陣列
- 將兩個有序陣列合併為一個有序陣列陣列
- 4. 尋找兩個正序陣列的中位數陣列