面試題40 最小的K個數

2021-08-24 20:35:32 字數 875 閱讀 2167

題目描述

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

方法一:不修改原陣列,時間複雜度o(nlgk)

class solution 

if(result[k-1] > input[i])

result[k-1] = input[i];}}

return result;

}private:

void headadjust(vector

&input, int parent, int length)

if(temp >= input[child])

input[parent] = input[child];

parent = child;

child = 2 * parent + 1;

}input[parent] = temp;

}};

方法二:變動原陣列,時間複雜度o(nlgk)

class solution 

for(int j = k; j < len; ++j)//從第k個元素開始與小根堆的根節點比較

}for(int i = 0; i < k; ++i)

res.push_back(input[i]);

return res;

}void sift(vector

&input, int low, int high)//需要修改input,用引用

else

break;

}input[i] = tmp;//被篩選的節點放入最終位置

}};

面試題40 最小k個數

題目 輸入n個整數,找出其中最小的k個數 思路 1 如果輸入的陣列可以改變,則基於第k個數來調整,是第k個數左邊的數都小於第k個數,右邊的數都大於第k個數 時間複雜度o n 思路1 void printkminnumberbymethod1 int arr,int length,int k int ...

面試題40 最小的K個數

輸入n個整數,找出其中最小的k個數。例如輸入4 5 1 6 2 7 3 8 這8個數字,則最小的4個數字是1 2 3 4。分析 這道題最簡單的思路莫過於把輸入的n個整數排序,排序之後位於最前面的k個數就是最小的k個數,這種思路的時間按複雜度是o nlogn 2.1 方法一 時間複雜度為o n 的演算...

面試題40 最小的k個數!

題目 輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,方法一 堆排序 class solution public vectorgetleastnumbers solution vectorinput,int k return r...