![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
类型总结之——排序算法
Mona______
好好学习天天向上 o(≧v≦)o
展开
-
leetcode——第315题——树状数组&归并排序 逆序对
题目:计算右侧小于当前元素的个数给定一个整数数组 nums,按要求返回一个新数组 counts。数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量。/*使用前缀和的解法,但是需要对原始的数据做一些处理1、反转后的数组,nums 倒叙反转所得,因为倒叙输入才能转换为前置的 前缀和数组2、排序后的数组,排序时重复元素归类为同一个,所以排序后的总元素个数是小于等于原始的数组元素个数的3、频率数组,依次遍历反转后的数组,按照排序数组记录的原创 2021-06-03 18:03:42 · 204 阅读 · 0 评论 -
leetcode——第307题——树状数组 区域和检索
给你一个数组 nums ,请你完成两类查询,其中一类查询要求更新数组下标对应的值,另一类查询要求返回数组中某个范围内元素的总和。实现 NumArray 类:NumArray(int[] nums) 用整数数组 nums 初始化对象void update(int index, int val) 将 nums[index] 的值更新为 valint sumRange(int left, int right) 返回子数组 nums[left, right] 的总和(即,nums[left] + nums[原创 2021-06-03 17:50:58 · 274 阅读 · 2 评论 -
剑指offer——第51题——数组中的逆序对
题目:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。class Solution {public: int reversePairs(vector<int>& nums) { return split(nums, 0, nums.size() - 1); }private: // 递归实现 分治 int split(vector<int&g原创 2021-06-02 21:21:32 · 265 阅读 · 0 评论 -
leetcode——第493题——翻转对
题目:给定一个数组 nums ,如果 i < j 且 nums[i] > 2*nums[j] 我们就将 (i, j) 称作一个重要翻转对。你需要返回给定数组中的重要翻转对的数量。// 归并排序 = 分治 + 归并// 分治常用 partition 或者是 split/*本题就是用常规的归并排序的套路来完成的只不过需要再归并之前,对 左右两个部分的数组计算一下逆序对儿1、分治,就是把数组分组,每次分成两部分,前面和后面,以 [1,3,2,3,1] 为例 注意分治的思想,原创 2021-06-02 17:08:37 · 207 阅读 · 0 评论 -
leetcode——第148题——排序链表
题目:给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。进阶:你可以在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序吗?/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x原创 2021-06-01 22:19:06 · 194 阅读 · 0 评论