時限:1000ms 記憶體限制:10000k 總時限:3000ms
描述求第k小數
輸入先輸入乙個小於10000的正整數n,再輸入n個整數,最後輸入乙個小於等於n的正整數k,
輸出輸出其中第k小的數。
輸入樣例
52 98 34512 8492 1000
2輸出樣例
提示**
/*
思路:可以採用二分法思想,先讓乙個數順序歸位。
如果要找的數的下標比這個數的下標大,則從這個數的左邊找
如果要找的數的下標比這個數小,則在這個數左邊找
依次遞迴
*/ #includeusing namespace std;
int a[10005],n,k;
int findk(int left,int right)
a[i] = a[j];
while(i < j&&a[i] <= temp)
a[j] = a[i];
} a[i] = temp;
if(i == k)else if(i < k)else
}int main()
cin>>k;
cout<}
求第k小數
求第k小數,無非就是考查排序,請參考我最新的博文吧求第k小數 直接使用priority queue,在網上看到許多使用快排來求第k小數都是認為第k小就是排好序陣列中第k個元素,但是如果陣列中有相同的元素呢,例如 1,2,2,2,3,5 認為第三小是3還是2呢?我刷題時遇到的是認為是3。沒有想到什麼好...
關於求各種第K小數的總結
大前提 題目敘述中若未指定n,m,q三個變數,則預設n表示序列長度,m表示總操作次數 包括修改和查詢 q表示詢問總次數.給定乙個長度為n的整數序列,求序列中第k小的數字.時間複雜度 多次詢問o nlogn 單次詢問o n 空間複雜度 o n 可以採用諸多複雜度為o nlogn 的排序方法,如快速排序...
牛客 第k小數 線性尋找第 k 小數
題目大意 給出長度為 n 的數列 a 要求找到第 k 小的數 題目分析 因為資料給的足夠大,所以約束就是必須線性完成操作,stl 中的 nth element 函式可以完美實現操作,算是學到了一波,格式 nth element a.begin a.begin k a.end 那麼 a k 就是第 k...