1.有多少小于当前数字的数字
题目:
给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目。
换而言之,对于每个 nums[i] 你必须计算出有效的 j 的数量,其中 j 满足 j != i 且 nums[j] < nums[i] 。
以数组形式返回答案。
思路:对原数组进行排序,记录每一个数字的下标,根据下标即可判断有多少数字小于当前数字,注意重复数字的处理
/**
* @param {number[]} nums
* @return {number[]}
*/
var smallerNumbersThanCurrent = function(nums) {
const l = nums.length;
const list = nums.slice().sort((a, b) => a - b);
const map = new Map();
map.set(list[0], 0);
for (let i = 1; i < l; i++) {
while (list[i] == list[i - 1] && i < l) {
i++;
}
map.set(list[i], i);
}
return nums.map((i) => map.get(i));
};
2.上升下降字符串
题目:
给你一个字符串 s ,请你根据下面的算法重新构造字符串:
从 s 中选出 最小 的字符,将它 接在 结果字符串的后面。
从 s 剩余字符中选出 最