之前總結過排序的方法,在這裡在寫一下快速排序。
快速排序的本質就是分治演算法,先找到該元素的正確位置,然後再將兩邊的元素遞迴進行快速排序。
**如下:
int partition(vector&nums,int left,int right)
nums[left]=nums[right];
while(left&nums,int left,int right)
int pivot=partition(nums,left,right);
quicksort(nums,left,pivot-1);
quicksort(nums,pivot+1,right);
}
快速排序可以用來求解第k大數字:
class solution
nums[right]=nums[left];
while(left&nums,int left,int right)
while(l<=r&&nums[r]<=pivot)
if(l& nums, int k)
if(posleetcode中的tag為sort的題目:
leetcode56:題目
區間合併,思路:將區間按照開始值進行排序,將第乙個加入到結果中,然後依次遍歷,如果遍歷的元素的開始處大於等於結果最後乙個元素的結束值,那麼修改結果中最後乙個元素中的結束值。否則,加入到結果中。
**如下:
/*** definition for an interval.
* struct interval
* interval(int s, int e) : start(s), end(e) {}
* };
*/static bool cmp(interval a,interval b)
sort(intervals.begin(),intervals.end(),cmp);
ret.push_back(intervals[0]);
for(int i=1;i57:插入區間
57. insert interval
解題思路:同上面的題目,給定乙個區間,插入到陣列中去。然後返回新的陣列。從開始處進行遍歷,如果當前的區間的結束值小於新區間的開始值,則加到結果中,如果當前遍歷到的區間的開始值大於給定的新區間的開始值,那麼跳出迴圈。否則,新區間和當前遍歷的區間有交集,去兩個區間的並集即可。
**如下:
/*** definition for an interval.
* struct interval
* interval(int s, int e) : start(s), end(e) {}
* };
*/class solution
else
// 每個桶的長度len,向上取整所以加+
int len = (maxnum - minnum) / num.size() + 1;
//桶的個數:(maxnum - minnum) / len + 1,每個桶裡面儲存屬於該桶的最大值和最小值即可,注意這裡的最大最小值是區域性的
vector> buckets((maxnum - minnum) / len + 1);
for (int x : num)
else
}//gap的計算,for each non-empty buckets p, find the next non-empty buckets q, return min( q.min - p.max )
int gap = 0;
int prev = 0;
for (int i = 1; i < buckets.size(); i++)
return gap;
}};
leetcode 排序題目
merge k sorted lists insertion sort list sort list first missing positive sort colors 147.insertion sort list sort a linked list using insertion sort....
Leetcode128 題目總結 hard
the first missing positive 找第乙個丟失的整數 方法1 從1開始尋找正整數result 找到就把他交換到nums i 同時i回退到result 1,時間複雜度大於o n ac class solution else return result 方法2 對每乙個大於1的數nu...
Leetcode中Path的題目總結
matrix中的path問題 62.unique paths 63.unique paths ii 這兩題是典型的dp問題,要求一共有多少種方案。分析狀態f i,j 是走到 i,j 總共的路徑。它可以由前面兩個狀態得到,即f i,j f i 1,j f i,j 1 最後注意邊界值即可。變形是有設ob...