思想:1.用大頭堆實現 2.類似快速排序實現
1.用大頭堆實現
《程式設計師面試一百題》解法
2.類似快速排序實現
//程式猴
#include "stdafx.h"
#include #include #include #include #include using namespace std;
//每次將陣列劃分為兩部分,再在滿足條件的一部分裡找到第k小的數,它前面的數就是最小的k個數
void findkleastnums(int data,int lower,int upper,int least_size)
while (idata[lower]);
if (i>j)
break;
tmp = data[i];
data[i] = data[j];
data[j] = tmp;
} tmp = data[lower];
data[lower] = data[j];
data[j] = tmp;
if (jleast_size)
return;
}int main(void)
; printf(" 原陣列中元素:");
int i = 0;
while(i<10)
findkleastnums(data,0,9,5);
printf("\n調整後最小的5個:");
for (i = 0;i<5;i++)
return 0;
}
執行結果
在O n 時間內查詢陣列內第k小的數
前一陣子做作業,看到了這個,要求在 o n 時間內查詢前 k 小的 k 個數,給出的提示是,先在 o n 時間內查詢到第 k 小的數.由此想到,此前一直用 的 sort 函式,排完序後找下標為 k 1 的那個數,卻從來沒有考慮過具體的 實現.結合前一陣子學習的快速排序演算法,大致對此有了新的認識.首...
選擇問題 線性時間內找到序列的第k小的元素
選擇問題 在序列中按順序找到某個元素。這可以用排序方法做到,即先排個序,在找到指定元素,但是這樣就按最快的堆排序 合併排序啥的都得是o nlgn 數量級的,這裡採取的方法可以在期望為o n 的時間內完成。具體的實現方式如下 int select int a,int begin,int end,int...
在指定的時間內點選某元素達到一定的次數後才觸發事件
工作需要,要做乙個點選某一元素,在規定的時間內,點選次數達到一定值時,才觸發其他事件。剛開始是一臉懵逼,思緒混亂,首先想到了使用定時器,後來繞來繞去,始終沒有解決,在跟安卓開發的同事交流一番後,便產生了乙個更加簡單的方法,不使用定時器。大致思路是這樣的 初始時,給乙個變數clicknum,值為0,用...