中国网站设计模板下载马云做黄页网站时候
web/
2025/10/9 10:55:28/
文章来源:
中国网站设计模板下载,马云做黄页网站时候,小程序如何快速推广,企业门户样式目录 快速排序--递归
归并排序--递归
插入排序
冒泡排序
选择排序
215 给定整数数组 nums 和整数 k#xff0c;请返回数组中第 k 个最大的元素。
347. 前 K 个高频元素 快速排序--递归
void quick_sort(vectorint nums, int l, int r) {if (l 1 r) …目录 快速排序--递归
归并排序--递归
插入排序
冒泡排序
选择排序
215 给定整数数组 nums 和整数 k请返回数组中第 k 个最大的元素。
347. 前 K 个高频元素 快速排序--递归
void quick_sort(vectorint nums, int l, int r) {if (l 1 r) {return;}int first l, last r - 1, key nums[first];while (first last){while(first last nums[last] key) {--last;}nums[first] nums[last];while (first last nums[first] key) {first;}nums[last] nums[first];}nums[first] key;quick_sort(nums, l, first);quick_sort(nums, first 1, r);
}
归并排序--递归
void merge_sort(vectorint nums, int l, int r, vectorint temp) {if (l 1 r) {return;}
// divideint m l (r - l) / 2;merge_sort(nums, l, m, temp);merge_sort(nums, m, r, temp);
// conquerint p l, q m, i l;while (p m || q r) {if (q r || (p m nums[p] nums[q])) {temp[i] nums[p];} else {temp[i] nums[q];}}for (i l; i r; i) {nums[i] temp[i];}
}
插入排序
void insertion_sort(vectorint nums, int n) {for (int i 0; i n; i) {for (int j i; j 0 nums[j] nums[j-1]; --j) {swap(nums[j], nums[j-1]);}}
}
冒泡排序
void bubble_sort(vectorint nums, int n) {bool swapped;for (int i 1; i n; i) {swapped false;for (int j 1; j n - i 1; j) {if (nums[j] nums[j-1]) {swap(nums[j], nums[j-1]);swapped true;}}if (!swapped) {break;}}
}
选择排序
void selection_sort(vectorint nums, int n) {int mid;for (int i 0; i n - 1; i) {mid i;for (int j i 1; j n; j) {if (nums[j] nums[mid]) {mid j;}}swap(nums[mid], nums[i]);}
}
排序调用方法
void sort() {vectorint nums {1,3,5,7,2,6,4,8,9,2,8,7,6,0,3,5,9,4,1,0};vectorint temp(nums.size());sort(nums.begin(), nums.end());quick_sort(nums, 0, nums.size());merge_sort(nums, 0, nums.size(), temp);insertion_sort(nums, nums.size());bubble_sort(nums, nums.size());selection_sort(nums, nums.size());
}
215 给定整数数组 nums 和整数 k请返回数组中第 k 个最大的元素。
请注意你需要找的是数组排序后的第 k 个最大的元素而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。
书中最优解
int pointers::findKthLargest(vectorint nums, int k)
{int l 0, r nums.size() - 1, target nums.size() - k;while (l r) {int mid quickSelection(nums, l, r);if (mid target) {return nums[mid];}if (mid target) {l mid 1;}else {r mid - 1;}}return nums[l];
}// 辅函数 - 快速选择
int quickSelection(vectorint nums, int l, int r) {int i l 1, j r;while (true) {while (i r nums[i] nums[l]) {i;}while (l j nums[j] nums[l]) {--j;}if (i j) {break;}swap(nums[i], nums[j]);}swap(nums[l], nums[j]);return j;
}
本人写提交超出时间限制
int pointers::findKthLargest(vectorint nums, int k)
{int len nums.size();for (int i 0; i len; i) {for (int j i; j 0 nums[j]nums[j-1]; --j) {swap(nums[j], nums[j - 1]);}}return nums[len-k];
}
347. 前 K 个高频元素
给你一个整数数组 nums 和一个整数 k 请你返回其中出现频率前 k 高的元素。 你可以按 任意顺序 返回答案。
解桶排序
书中最优解
vectorint pointers::topKFrequent(vectorint nums, int k)
{unordered_mapint, int counts;/*unordered_map容器用来存储键值对其中键为int型值为int型可以用counts[key]方式增加某个键的值如果键不存在会自动插一个新的键值对值为0由于unordered_map不允许存储具有重复键的元素因此count()函数本质上检查unordered_map中是否存在具有给定键的元素。*/int max_count 0;//统计每个元素出现的次数实现数频率for (const int num : nums) {max_count max(max_count, counts[num]);}vectorvectorint buckets(max_count 1); //行数max_count 1//将次数为i的元素放入i桶中实现频率数通过键值相互交换达到value排序的目的这种写法更符合Cfor (const auto p : counts) {buckets[p.second].push_back(p.first);}vectorint ans;for (int i max_count; i 0 ans.size() k; --i) {for (const int num : buckets[i]) {ans.push_back(num);if (ans.size() k) {break;}}}return ans;}
学习leetcode-347. 前K个高频元素 - ggaoda - 博客园 (cnblogs.com)
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/89593.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!