面試題40 最小的k個數

2022-03-03 20:35:23 字數 781 閱讀 8850

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

解題思路

上**(c++香)

法一:排序後遍歷(相當於簡化後的暴力)

class solution 

int mypartition(vector&num, int low, int high)

return low;

}// 快排

void qsort(vector&num, int low, int high)

vectorgetleastnumbers_solution(vectorinput, int k)

};

法二:借助快排的partition思想

得到pivot如果與k-1相等,那麼陣列左邊的數已經就比num[k-1]小了,所以找到這個pivot就行。

void myswap(vector&num, int i, int j)

int mypartition(vector&num, int low, int high)

return low;

}vectorgetleastnumbers_solution(vectorinput, int k)

else

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

ans.push_back(input[i]);

return ans;

}

面試題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,方法一 不修改原陣列,時間複雜度o nlgk class solution if result k 1 input i result k 1 input i return...