1. 题目描述

2. 题目思路
- 给定一个数组,让你返回每个数值数组中比他小的个数
- 思路一:直接暴力,两次for循环,出结果
- 思路二:快速排序,
prev == -1 || data[i][0] != data[i - 1][0]
,如果当前的数值不等于前面的数值的话,说明不重复,进行ret[data[i][1]] = prev;
- 思路三:桶排序,一遍循环放桶中,一遍循环求下前缀和,最后一遍得出结果
注意:因为该题目指定了规定的数据区间
3. 题目代码
public static int[] SmallerNumbersThanCurrent(int[] nums)
{
// 桶排
int[] array = new int[101];
for (int i = 0; i < nums.Length; i++)
{
array[nums[i]]++;
}
for (int i = 1; i < 101; i++)
{
array[i] = array[i] + array[i - 1];
}
int[] cnt = new int[nums.Length];
for (int i = 0; i < nums.Length; i++)
{
if (nums[i] == 0)
{
cnt[i] = 0;
}
else
{
cnt[i] = array[nums[i] - 1];
}
}
return cnt;
}
还没有评论,来说两句吧...