排序
leetcode常见的排序题目
重you小垃
这个作者很懒,什么都没留下…
展开
-
排序(归并,快排,堆)
---------------------------------------------------------归并排序O(nlogn)递归写法void mergeSort(vector<int>& nums, int left, int right) { //加上引用 if (left < right) { //放到判断里面 int mid = (left + right) / 2; mergeSort(nums, left, mid); mergeSort原创 2021-10-14 21:56:57 · 89 阅读 · 0 评论 -
leetcode373. 查找和最小的 K 对数字(中等)
同 leetcode378.有序矩阵中第K小的元素(中等) 类似https://blog.csdn.net/zhangjiaji111/article/details/122716718思路:归并排序刚开始错误的思路:先把v1[0]v2[0]放进去,然后获得v1[x] v2[y]如果将 v1[x+1] v2[y]和v1[x] v2[y+1]放入的话会出现重复!正解:先将[0…min(k,n-1)][0]放进去,每次拿到v1[x]v2[y]将v1[x]v2[y+1]放入............原创 2022-07-01 22:52:53 · 133 阅读 · 0 评论 -
leetcode791.自定义字符串排序(中等)
思路:把T中出现的字符个数放到hash中,遍历S,按照每个出现的顺序放到ans中,然后遍历26,将没有出现在S中的放到ans中即可。判断字符是否在S中的做法:由于S中的字符不重复,因此可以用位运算做hash来存储S中每个字符的状态,判断某个字符在不在S中用位运算’&'即可。具体步骤:step1:填hashstep2:遍历order,将在order中的字符个数放在前面step3:遍历26,将不在order中的字符个数放在后面class Solution {public: st..原创 2022-01-26 18:44:52 · 139 阅读 · 0 评论 -
leetcode88.合并两个有序数组(简单)
自己的思路:合并排序的一部分。时间O(n) 空间复杂度O(m+n)class Solution {public: void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) { vector<int> tmp(m + n); int index = 0, index1 = 0, index2 = 0; while (ind..原创 2021-10-15 11:56:11 · 97 阅读 · 0 评论 -
leetcode347.前k个高频元素(中等)
题目类似于leetcode215.topK做法相同:都是堆排序和快排,唯一的不同是topK是输出第k大元素,这道题是找出前k大,所以在快排的代码中就不能剪枝了。做法一:堆排序 时间:O(nlogn)class Solution {public: struct cmp { bool operator () (pair<int, int> p1, pair<int, int> p2) { return p1.second <..原创 2021-10-20 11:34:12 · 162 阅读 · 0 评论 -
leetcode378.有序矩阵中第K小的元素(中等)
n^2约等于10的5次方,写成n。解法一:优先队列(大顶堆)。 时间复杂度O(nlogn)class Solution {public: int kthSmallest(vector<vector<int>>& matrix, int k) { priority_queue<int> pq; for (auto& row : matrix) { for (auto...原创 2022-01-27 14:26:09 · 882 阅读 · 0 评论 -
leetcode215.数组中的第K个最大元素(topK问题)
第一思路:分块思想。 由于出现了负数,放弃。第二想法:优先队列(最优)class Solution {public: int findKthLargest(vector<int>& nums, int k) { int n = nums.size(); priority_queue<int> q; for (int i = 0; i < n; ++i) { q.push(nums[.原创 2021-10-15 10:16:56 · 228 阅读 · 0 评论 -
leetcode1798.你能构造出连续值的最大数目(中等)
思路:排序实现细节:当一些元素能构造区间[0, x]时,当加入y后,可构造的新区间为[y,x+y],如果y<=x+1则可以扩展更大的区间:[0,x+y],否则不可以。难点:如果y不可以扩展,则>y的数更不可以扩展,所以需要排序class Solution {public: int getMaximumConsecutive(vector<int>& coins) { sort(coins.begin(), coins.end());...原创 2022-04-18 16:22:46 · 168 阅读 · 0 评论 -
leetcode18.四数之和(中等)
思路:参考三数之和 :https://blog.csdn.net/zhangjiaji111/article/details/110673533易错点:1.取值范围是10-9,考虑int越界2.跟三数之和不同的是,nums[i] > tagert时不能break。。。class Solution {public: vector<vector<int>> fourSum(vector<int>& nums, int target) {..原创 2022-03-21 20:10:09 · 347 阅读 · 0 评论 -
LeetCode49.字母异位词分组(中等)
class Solution {public: vector<vector<string>> groupAnagrams(vector<string>& strs) { //总结:分组做法:建立这样的映射 map<string, vector<string>> mp!!! map<string, vector<string>> mp; //映射:键为排序后的字符串,值为ve.原创 2020-12-11 12:25:11 · 199 阅读 · 1 评论 -
leetcode15.三数之和(中等)
class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { //去重的方法:递增排序 /* 思路:从前往后遍历 有三种情况 1.如果当前值>0则结束,因为后面都是大于它,不可能存在 2.当前值等于前一个值,直接跳过,避免重复 3.l=i+1 r=n-1 一起向中间移.原创 2020-12-04 21:39:19 · 309 阅读 · 0 评论 -
leetcode56.合并区间(中等)
属于区间的第一类题型:贪心解决。思路:先将坐标从小到大排序,然后遍历一遍判断即可。class Solution {public: vector<vector<int>> merge(vector<vector<int>>& intervals) { sort(intervals.begin(), intervals.end()); vector<vector<int>> ans..原创 2021-12-22 19:25:40 · 422 阅读 · 0 评论 -
leetcode1921.消灭怪物的最大数量(中等)
解法:排序+贪心具体:计算出每个怪物到达城市的时间,然后排序。class Solution {public: int eliminateMaximum(vector<int>& dist, vector<int>& speed) { int n = dist.size(); vector<double> time(n); for (int i = 0; i < n;...原创 2021-12-24 10:05:15 · 450 阅读 · 0 评论