2022-4-9 Leetcode 912.排序数组
第一版,使用库函数
`class Solution {public:vector<int> sortArray(vector<int>& nums) {sort(nums.begin(),nums.end());return nums;}
};`
借此复习一下快排和堆排序
class Solution {void maxHeapify(vector<int>& nums, int i, int len) {for (; (i << 1) + 1 <= len;) {int lson = (i << 1) + 1;int rson = (i << 1) + 2;int large;if (lson <= len && nums[lson] > nums[i]) {large = lson;} else {large = i;}if (rson <= len && nums[rson] > nums[large]) {large = rson;}if (large != i) {swap(nums[i], nums[large]);i = large;} else {break;}}}void buildMaxHeap(vector<int>& nums, int len) {for (int i = len / 2; i >= 0; --i) {maxHeapify(nums, i, len);}}void heapSort(vector<int>& nums) {int len = (int)nums.size() - 1;buildMaxHeap(nums, len);for (int i = len; i >= 1; --i) {//为啥要交换?//虽然说比较大的元素需要上浮,但是上浮前不应该先判断下吗?swap(nums[i], nums[0]);len -= 1;maxHeapify(nums, 0, len);}}
public:vector<int> sortArray(vector<int>& nums) {heapSort(nums);return nums;}
};作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/sort-an-array/solution/pai-xu-shu-zu-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
官方的答案没有看懂,下面的这个题解倒是看懂了
class Solution {public int[] sortArray(int[] nums) {int len = nums.length;int[] a = new int[len + 1];for (int i = 0; i < nums.length; ++i) {a[i+1] = nums[i];} //下沉建堆//从中间开始,每个节点都下沉了一遍,已经在底部的节点没有必要再下沉了。for (int i = len/2; i >= 1; --i) {sink(a,i,len);}int k = len;//排序while (k > 1) {swap(a,1,k--);//由于是大顶堆,删除的时候将堆顶放在堆底sink(a,1,k);//删除之后依次下沉每一个堆顶}for (int i = 1; i < len+1; ++i) {nums[i-1] = a[i];}return nums;}public void sink (int[] nums, int k,int end) {//下沉while (2 * k <= end) {int j = 2 * k;//找出子节点中最大或最小的那个if (j + 1 <= end && nums[j + 1] > nums[j]) {j++;//这里找出的是最大的那个,并且下沉建堆是从当前的节点到根节点的下沉建堆}if (nums[j] > nums[k]) {swap(nums, j, k);//交换} else {break;}k = j;}}public void swap (int nums[], int i, int j) {int temp = nums[i];nums[i] = nums[j];nums[j] = temp;}}作者:chefyuan
链接:https://leetcode-cn.com/problems/sort-an-array/solution/dong-hua-mo-ni-yi-ge-po-dui-pai-wo-gao-l-i6mt/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
自己用C++写了一遍,开心,学会了堆排序
class Solution {public:
//堆排序
void swap(vector<int>& nums,int i,int j){int temp = nums[i];nums[i] = nums[j];nums[j] = temp;
}
//下沉第k个节点
void sink(vector<int>& nums,int k,int end){while(k*2 <= end){int j = k*2;if(j + 1 <= end && nums[j+1] > nums[j]){j++;}if(nums[k] < nums[j]){swap(nums,k,j);}else {break;}k = j;//新的index用来查看是否需要继续下沉}
}vector<int> sortArray(vector<int>& nums) {int len = nums.size();vector<int> a(len+1);copy(nums.begin(),nums.end(),a.begin()+1);//下沉建堆for(int i = len/2;i >= 1;i--){sink(a,i,len);}int k = len;while(k > 1){swap(a,1,k--);sink(a,1,k);}nums.assign(a.begin()+1, a.end());return nums;}
};
2022-4-9 Leetcode 912.排序数组相关推荐
- Leetcode 912.排序数组(Sort an Array)
Leetcode 912.排序数组 1 题目描述(Leetcode题目链接) 给定一个整数数组 nums,将该数组升序排列. 输入:[5,2,3,1] 输出:[1,2,3,5] 输入:[5,1,1 ...
- Leetcode.912 排序数组
题目链接 Leetcode.912 排序数组 mid 题目描述 给你一个整数数组 n u m s nums nums,请你将该数组升序排列. 示例 1: 输入:nums = [5,2,3,1] 输出: ...
- LeetCode 912. 排序数组(Java)
912. 排序数组 你一个整数数组 nums,请你将该数组升序排列. 示例 1: 输入:nums = [5,2,3,1] 输出:[1,2,3,5] 提示: 1 <= nums.length &l ...
- LeetCode 912. 排序数组【模板题】
912. 排序数组 [快排] class Solution {// 快速排序 7:32 13void quickSort(int[] nums, int l, int r){if(l >= r) ...
- LeetCode[912]排序数组
难度:Medium 题目: 给你一个整数数组 nums,请你将该数组升序排列. 示例 1: 输入:nums = [5,2,3,1] 输出:[1,2,3,5] 示例 2: 输入:nums = [5,1, ...
- LeetCode 912. 排序数组(10种排序)
文章目录 1. 题目 2. 解题 2.1 插入排序 2.2 冒泡排序 2.3 选择排序 2.4 希尔排序 2.5 归并排序 2.6 快速排序 2.7 堆排序 2.8 计数排序 2.9 桶排序 2.10 ...
- [leetcode] 912.排序数组
给你一个整数数组 nums,请你将该数组升序排列. 示例 1: 输入:nums = [5,2,3,1] 输出:[1,2,3,5] 示例 2: 输入:nums = [5,1,1,2,0,0] 输出:[0 ...
- LeetCode 912. 排序数组-快排(C++)
本题是华为一面手撕题目. 快排的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程 ...
- LeetCode删除排序数组中的重复项(Java实现)
原题: 给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件 ...
最新文章
- 第2篇 C#数据类型-值类型与引用类型
- mySql 注入攻击
- python list 取重复次数
- 线程的退出 java_(转)Java结束线程的三种方法
- suse linux10 关闭防火墙,Suse10 关闭防火墙
- verilog对YCrCb转换灰度设计及仿真
- JS中var与function
- 8个成语接龙首尾相连_小学经典成语200个,已按场景分类好,孩子写作不再词穷...
- BTP-2118 玩 GTA5
- 算法设计与分析:最短路径问题(哈密顿回路+最短路)小学期实践
- Android调用第三方app(Scheme隐式以及显示调用)
- win7安装java环境(详细步骤)
- mac下解决无法往U盘内复制文件的问题
- rest-assured实战
- 用了这么多年百度搜索, 今天才发现加上双引号搜索结果这么准
- w3wp ash oracle,Oracle session简介
- 计算机邀请函制作教案,计算机邀请函制作要点
- 学习QT之图形视图实例#-飞舞的蝴蝶
- 【英语语法入门】 第12讲 代词:指示代词和不定代词
- MATLAB运用——计算三维物体的质心(水花号)