315. 计算右侧小于当前元素的个数
难度:困难
问题描述:
给你一个整数数组 nums ,按要求返回一个新数组 counts 。数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量。
示例 1:
输入:nums = [5,2,6,1]
输出:[2,1,1,0]
解释:
5 的右侧有 2 个更小的元素 (2 和 1)
2 的右侧仅有 1 个更小的元素 (1)
6 的右侧有 1 个更小的元素 (1)
1 的右侧有 0 个更小的元素
示例 2:
输入:nums = [-1]
输出:[0]
示例 3:
输入:nums = [-1,-1]
输出:[0,0]
提示:
1 <= nums.length <= 105
-104 <= nums[i] <= 104
问题分析:
本问题对于一个整数数组nums,返回一个新数组counts,其中counts[i]的值是整数数组nums中nums[i]元素右侧小于nums[i]的数量,所以不管怎样,肯定需要这个一个功能,即告诉数组nums和给定的一个索引号i,能够统计出nums[i]右侧应该有多少个小于nums[i]的元素数量,为此设计的函数lesscount(nums,i)能够满足要求。
剩下的事情就比较好做了,函数answer(nums)通过循环遍历nums中的每一个索引号,然后调用lesscount(nums,i)函数计算出count[i],返回count数组,这个问题就解决了。
程序如下:
def lesscount(nums,i):a=nums[i]n=0for j in range(i+1,len(nums)):if nums[j]<a:n=n+1return ndef answer(nums):count=[]for j in range(len(nums)):c=lesscount(nums,j)count.append(c)return countnums=eval(input('pls input nums='))
print(answer(nums))
运行实例一:
pls input nums=[3,2,5,1]
[2, 1, 1, 0]
运行实例二:
pls input nums=[3,5,6,7]
[0, 0, 0, 0]
运行实例三:
pls input nums=[7]
[0]
解决一个问题,一定要反复阅读其问题描述,找到最关键的点,问题就会迎刃而开。