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

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

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

示例:

输入:nums = [5,2,6,1]
输出:[2,1,1,0]
解释:
5 的右侧有 2 个更小的元素 (2 和 1)
2 的右侧仅有 1 个更小的元素 (1)
6 的右侧有 1 个更小的元素 (1)
1 的右侧有 0 个更小的元素

解题思路

使用归并排序,每一次合并的时候,对于左区间的每个元素,根据右区间指针的位置我们可以得出,右区间存在多少个大于当前元素的(即在当前元素前已经被合并的元素个数)。

使用一个额外的index数组,记录下每个元素在原数组的下标,使得我们可以将对应的结果加入到答案数组中

代码

class Solution {int[] idx;int[] res;public List<Integer> countSmaller(int[] nums) {int n=nums.length;idx=new int[n];res=new int[n];for(int i=0;i<n;i++)idx[i]=i;List<Integer> list=new ArrayList<>();mergeSort(nums,0,n-1);for(int i=0;i<n;i++)list.add(res[i]);return list;}public void mergeSort(int[] nums,int l,int r){if(l<r){int mid=(r-l)/2+l;mergeSort(nums,l,mid);mergeSort(nums,mid+1,r);merge(nums,l,mid,r);}}public void merge(int[] nums,int l,int mid,int r){int i=l,j=mid+1,p=0;int[] t=new int[r-l+1];int[] ni=new int[r-l+1];while(i<=mid&&j<=r){if(nums[i]<=nums[j]){res[idx[i]]+=(j-mid-1);t[p]=nums[i];ni[p]=idx[i];p++;i++;}else {t[p]=nums[j];ni[p]=idx[j];p++;j++;}}while(i<=mid){res[idx[i]]+=(j-mid-1);t[p]=nums[i];ni[p]=idx[i];p++;i++;}while(j<=r){t[p]=nums[j];ni[p]=idx[j];p++;j++;}for(int k=0;k<r-l+1;k++){idx[k+l]=ni[k];nums[k+l]=t[k];}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/390086.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IOS上传文件给java服务器,返回报错unacceptable context-type:text/plain

IOS上传文件给java服务器&#xff0c;返回报错unacceptable context-type&#xff1a;text/plain response返回类型不对 RequestMapping(value "uploadMultiFiles", method RequestMethod.POST, produces"application/json;charsetUTF-8") 使用produces指…

Python爬虫框架Scrapy学习笔记原创

字号scrapy [TOC] 开始 scrapy安装 首先手动安装windows版本的Twisted https://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted pip install Twisted-18.4.0-cp36-cp36m-win_amd64.whl 安装scrapy pip install -i https://pypi.douban.com/simple/ scrapy windows系统额外需要…

600. 不含连续1的非负整数

600. 不含连续1的非负整数 给定一个正整数 n&#xff0c;找出小于或等于 n 的非负整数中&#xff0c;其二进制表示不包含 连续的1 的个数。 示例 1:输入: 5 输出: 5 解释: 下面是带有相应二进制表示的非负整数< 5&#xff1a; 0 : 0 1 : 1 2 : 10 3 : 11 4 : 100 5 : 101…

高可用性、负载均衡的mysql集群解决方案

2019独角兽企业重金招聘Python工程师标准>>> 一、为什么需要mysql集群&#xff1f; 一个庞大的分布式系统的性能瓶颈中&#xff0c;最脆弱的就是连接。连接有两个&#xff0c;一个是客户端与后端的连接&#xff0c;另一个是后端与数据库的连接。简单如图下两个蓝色框…

Django的model查询操作 与 查询性能优化

Django的model查询操作 与 查询性能优化 1 如何 在做ORM查询时 查看SQl的执行情况 (1) 最底层的 django.db.connection 在 django shell 中使用 python manage.py shell>>> from django.db import connection >>> Books.objects.all() >>> connect…

887. 鸡蛋掉落

887. 鸡蛋掉落 给你 k 枚相同的鸡蛋&#xff0c;并可以使用一栋从第 1 层到第 n 层共有 n 层楼的建筑。 已知存在楼层 f &#xff0c;满足 0 < f < n &#xff0c;任何从 高于 f 的楼层落下的鸡蛋都会碎&#xff0c;从 f 楼层或比它低的楼层落下的鸡蛋都不会破。 每次…

678. 有效的括号字符串

678. 有效的括号字符串 给定一个只包含三种字符的字符串&#xff1a;&#xff08; &#xff0c;&#xff09; 和 *&#xff0c;写一个函数来检验这个字符串是否为有效字符串。有效字符串具有如下规则&#xff1a; 任何左括号 ( 必须有相应的右括号 )。任何右括号 ) 必须有相应…

Faster R-CNN代码例子

主要参考文章&#xff1a;1&#xff0c;从编程实现角度学习Faster R-CNN&#xff08;附极简实现&#xff09; 经常是做到一半发现收敛情况不理想&#xff0c;然后又回去看看这篇文章的细节。 另外两篇&#xff1a; 2&#xff0c;Faster R-CNN学习总结 这个主要是解释了18,…

剥开比原看代码09:通过dashboard创建密钥时,前端的数据是如何传到后端的?

2019独角兽企业重金招聘Python工程师标准>>> 作者&#xff1a;freewind 比原项目仓库&#xff1a; Github地址&#xff1a;https://github.com/Bytom/bytom Gitee地址&#xff1a;https://gitee.com/BytomBlockchain/bytom 在前面一篇文章&#xff0c;我们粗略的研究…

面试题 17.24. 最大子矩阵

面试题 17.24. 最大子矩阵 给定一个正整数、负整数和 0 组成的 N M 矩阵&#xff0c;编写代码找出元素总和最大的子矩阵。 返回一个数组 [r1, c1, r2, c2]&#xff0c;其中 r1, c1 分别代表子矩阵左上角的行号和列号&#xff0c;r2, c2 分别代表右下角的行号和列号。若有多个…

js模拟form表单提交数据, js模拟a标签点击跳转,避开使用window.open引起来的浏览器阻止问题...

js模拟form表单提交数据, js模拟a标签点击跳转&#xff0c;避开使用window.open引起来的浏览器阻止问题 js模拟form表单提交数据源码&#xff1a; /** * js模拟form表单提交 * param {object} 参数对象 * url 必填 提交地址 * methond 选填 默认post 提交方…

004. ES6之函数的扩展

2019独角兽企业重金招聘Python工程师标准>>> 1. 函数参数的默认值 ES6 允许为函数的参数设置默认值&#xff0c; function log(x, y World) {console.log(x, y); }log(Hello) // Hello World log(Hello, China) // Hello China log(Hello, ) // Hello// 1. 参数变量…

数据结构 | 链表:1097 删除重复元素

代码提交之后一直说段错误。我以为是数组开的不够大&#xff0c;但是随着数组一点一点开大&#xff0c;还是有一个case没有AC。最终我发现&#xff1a;是有个边界条件没有考虑到 void printList(const vector<Node>& a){if(!a.size()) return;FF(i,a.size()-1){print…

算法之美 : 位运算

上一小节我们用三道题了解一下面试过程中栈和队列的常见面试题。本小节笔者将通过几个 位运算 的题目来带大家熟悉下常用的位运算知识。 相比于栈和队列来讲&#xff0c;笔者自身认为位运算需要掌握的知识就要多一些&#xff0c;包括对于数字的二进制表示&#xff0c;二进制的反…

447. 回旋镖的数量

447. 回旋镖的数量 给定平面上 n 对 互不相同 的点 points &#xff0c;其中 points[i] [xi, yi] 。回旋镖 是由点 (i, j, k) 表示的元组 &#xff0c;其中 i 和 j 之间的距离和 i 和 k 之间的距离相等&#xff08;需要考虑元组的顺序&#xff09;。 返回平面上所有回旋镖的…

一名3年工作经验的程序员应该具备的技能

本文转自:https://m.imooc.com/article/details?article_id7557 前言 因为和同事有约定再加上LZ自己也喜欢做完一件事之后进行总结&#xff0c;因此有了这篇文章。这篇文章大部分内容都是面向整个程序员群体的&#xff0c;当然因为LZ本身是做Java开发的&#xff0c;因此有一部…

js 排序算法总结

1.冒泡排序 平均时间复杂度O(N2) 最好情况O(N)最坏情况O(N2) 空间复杂度O(1) function bubbleSort(arr){if(arr.length < 1)return arr;var flag 1; // 标识是否进行交换for(var i0; i < arr.length; i){if(i !0 && flag) break;for(var j0; j <…

524. 通过删除字母匹配到字典里最长单词

524. 通过删除字母匹配到字典里最长单词 给你一个字符串 s 和一个字符串数组 dictionary 作为字典&#xff0c;找出并返回字典中最长的字符串&#xff0c;该字符串可以通过删除 s 中的某些字符得到。 如果答案不止一个&#xff0c;返回长度最长且字典序最小的字符串。如果答案…

django开发商城(提供初始数据,商城首页及购物车)

1.爬取数据 2.json数据转化为sql语句 3.新建轮播图模型(模型名与sql语句对应表名相同) class Wheel(models.Model):imgmodels.CharField(max_length150)namemodels.CharField(max_length20)trackidmodels.CharField(max_length20) 4.终端打开mysql,执行插入语句 5.在首页进行展…

多语言版希尔排序

2019独角兽企业重金招聘Python工程师标准>>> 简介 希尔排序(Shells Sort)是插入排序的一种又称“缩小增量排序”&#xff08;Diminishing Increment Sort&#xff09;&#xff0c;是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因D.L…