目录

  • 问题描述
  • 问题分析

问题描述

问题分析

本题采用分治思想进行处理,单独处理较长数组算法复杂度过大,先拆分为短对象进行处理,最后将结果进行合并。
针对拆分出来的较短数组的处理:

class Solution {public:vector<int> countSmaller(vector<int>& nums) {vector<pair<int, int>>vec;//将数组值与index关联vector<int>count;//记录结果for (int i = 0; i < nums.size(); i++) {vec.push_back(make_pair(nums[i], i));count.push_back(0);//初始先拿0填充}merge_sort(vec, count);return count;}
private://将两个数组合并(按顺序)void merge_sort_two_vec(vector<pair<int, int>>& sub_vec1,vector<pair<int, int>>& sub_vec2,vector<pair<int, int>>& vec,//整合后的vector<int>& count) {int i = 0;int j = 0;while (i < sub_vec1.size() && j < sub_vec2.size()) {if (sub_vec1[i].first <= sub_vec2[j].first) {count[sub_vec1[i].second] += j;vec.push_back(sub_vec1[i]);i++;}else {vec.push_back(sub_vec2[j]);j++;}}for (; i < sub_vec1.size(); i++) {count[sub_vec1[i].second] += j;vec.push_back(sub_vec1[i]);}for (; j < sub_vec2.size(); j++) {vec.push_back(sub_vec2[j]);}}void merge_sort(vector<pair<int, int>>& vec, vector<int>& count) {if (vec.size() < 2) {return;}//分治int mid = vec.size() / 2;vector<pair<int, int>>sub_vec1;vector<pair<int, int>>sub_vec2;for (int i = 0; i < mid; i++) {sub_vec1.push_back(vec[i]);}for (int i = mid; i < vec.size(); i++) {sub_vec2.push_back(vec[i]);}//递归调用不断划分直至最小单元merge_sort(sub_vec1, count);merge_sort(sub_vec2, count);vec.clear();//合并merge_sort_two_vec(sub_vec1, sub_vec2, vec, count);}
};

力扣——315. 计算右侧小于当前元素的个数相关推荐

  1. 315. 计算右侧小于当前元素的个数

    315. 计算右侧小于当前元素的个数 给定一个整数数组 nums,按要求返回一个新数组 counts.数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于 nums[i ...

  2. LeetCode 315. 计算右侧小于当前元素的个数(Count of Smaller Numbers After Self)

    题目描述: 给定一个整数数组 nums,按要求返回一个新数组 counts.数组 counts 有该性质: counts[i] 的值是  nums[i] 右侧小于 nums[i] 的元素的数量. 示例 ...

  3. LeetCode 315. 计算右侧小于当前元素的个数(二叉查找树二分查找归并排序逆序数总结)

    文章目录 1. 题目 2. 解题 2.1 二叉查找树 2.2 二分插入 2.3 归并排序 1. 题目 给定一个整数数组 nums,按要求返回一个新数组 counts.数组 counts 有该性质: c ...

  4. leetcode315. 计算右侧小于当前元素的个数(树状数组解法)

    leetcode315. 计算右侧小于当前元素的个数(树状数组解法) 题目:给定一个整数数组 nums,按要求返回一个新数组 counts.数组 counts 有该性质: counts[i] 的值是 ...

  5. 当前元素_leetcode315. 计算右侧小于当前元素的个数

    leetcode315. 计算右侧小于当前元素的个数 给定一个整数数组 nums,按要求返回一个新数组 counts.数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小 ...

  6. 求栈中元素个数算法_每日算法系列【LeetCode 315】计算右侧小于当前元素的个数...

    题目描述 给定一个整数数组 nums ,按要求返回一个新数组 counts .数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量. 示例 ...

  7. 315. Count of Smaller Numbers After Self 计算右侧小于当前元素的个数

    Title 给定一个整数数组 nums,按要求返回一个新数组 counts.数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量. 示例: ...

  8. [Leetcode][第315题][JAVA][计算右侧小于当前元素的个数][暴力][归并排序+索引数组]

    [问题描述][中等] [解答思路] 1. 暴力 (超时) 时间复杂度:O(N^2) 空间复杂度:O(1) public List<Integer> countSmaller(int[] n ...

  9. python简单小案例列表_python计算列表内各元素的个数实例

    python计算列表内各元素的个数实例 如下所示: list = [1,2,3,4,5,6,7,5,4,3,2,12] set = set(list) dict = {} for item in se ...

最新文章

  1. 从 MySQL 执行原理告诉你:为什么分页场景下,请求速度非常慢?
  2. (转载)如何学好iphone游戏开发
  3. 大厂围城:千辛万苦杀进来,为何他们选择出逃?
  4. JAVA接口的访问权限_Java中访问权限-类和接口
  5. MSICE界面和功能分析
  6. [Leetcode] Flatten Binary Tree to Linked List 整平二叉树
  7. SSL 自签证书工具源码
  8. Eureka缓存机制
  9. HTML small元素
  10. linux 静态库、共享库
  11. 解决IE6不支持fixed
  12. jpeglib画质的代码分析
  13. linux系统管理Linux系统实验,操作系统原理与Linux系统实验
  14. SoC设计与验证——大型IP——PCIE控制器
  15. Selenium无法定位元素的九种解决方案
  16. 函数----ModifyStyle
  17. h3c交换机划分vlan
  18. java统计在线人数_java实现在线人数统计
  19. 科技爱好者周刊(第 168 期):游戏《底特律:变人》
  20. 寒武纪如何查看mlu的运行状态

热门文章

  1. oracle密码锁屏时间,Oracle Linux OEL7 如何关闭屏保和锁屏功能
  2. matlab nntool教程,Matlab nntool 应用实例教材.doc
  3. ios pan手势滑动消失动画_iOS仿抖音—评论视图滑动消失
  4. 计算机算法设计与分析 最长递增子序列
  5. RuntimeError: Expected tensor for argument #1 ‘indices‘ to have scalar type Long; but got CUDAFloatT
  6. Hash类的键值对允不允许为空的问题
  7. Flex(try-catch-finally)机制
  8. 《坦克世界》1.0+:使用 CPU 优化的图形和物理丰富用户体验
  9. 一本通1623Sherlock and His Girlfriend
  10. JQuery中的事件委托