劍指offer 30 最小的k個數

2021-08-08 11:57:49 字數 1487 閱讀 7694

輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,。

用partition求出第k小的數,這個數的左邊就是最小的k個數。

本來是這樣的。

可是,執行沒通過!!!!!!!!!!!!

超時??

先記錄下來吧。

# -*- coding:utf-8 -*-

class

solution:

defgetleastnumbers_solution

(self, tinput, k):

# write code here

res =

if k >= len(tinput):

return res

start = 0

end = len(tinput) - 1

index = self.partition(tinput, start, end)

while index != k - 1:

if index > k - 1:

end = index - 1

index = self.partition(tinput, start, end)

elif index < k - 1:

start = index + 1

index = self.partition(tinput, start, end)

for i in range(0, k):

return sorted(res)

defpartition

(self, tinput, start, end):

key = tinput[start]

s = start

e = end

while s < e:

while tinput[e] >= key and s < e:

e -= 1

while tinput[s] <= key and s < e:

s += 1

if s < e:

tinput[s], tinput[e] = tinput[e], tinput[s]

tinput[start], tinput[s] = tinput[s], tinput[start]

return s

簡單的ac**:

# -*- coding:utf-8 -*-

class

solution:

defgetleastnumbers_solution

(self, tinput, k):

# write code here

res =

if k > len(tinput):

return res

s = sorted(tinput)

for i in range(k):

return res

劍指offer 30 最小的k個數

題目 給出乙個陣列,輸出最小的k個數 解法1 類似於快排的方式,找到index,知道index等於k時,前面的k個數就是最小的數 public class main 5 public static void getmaxnum int input,int k else for int i 0 i i...

劍指offer 最小k個數

1.題目 輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,2.方法 1 基於堆排序演算法,構建最大堆。時間複雜度為o nlogk 2 如果用快速排序,時間複雜度為o nlogn 3 如果用插入排序,時間複雜度為o n 2 3.演...

劍指offer 最小的K個數

華電北風吹 天津大學認知計算與應用重點實驗室 日期 2015 10 4 題目描述 輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,解析 基於插入排序的思想可以想到使用乙個長度為k的排序陣列儲存最小的k個元素,複雜度o nk 基於...