题目:
给你一个数组 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)); };题目:
给你一个字符串 s ,请你根据下面的算法重新构造字符串:
从 s 中选出 最小 的字符,将它 接在 结果字符串的后面。 从 s 剩余字符中选出 最小 的字符,且该字符比上一个添加的字符大,将它 接在 结果字符串后面。 重复步骤 2 ,直到你没法从 s 中选择字符。 从 s 中选出 最大 的字符,将它 接在 结果字符串的后面。 从 s 剩余字符中选出 最大 的字符,且该字符比上一个添加的字符小,将它 接在 结果字符串后面。 重复步骤 5 ,直到你没法从 s 中选择字符。 重复步骤 1 到 6 ,直到 s 中所有字符都已经被选过。 在任何一步中,如果最小或者最大字符不止一个 ,你可以选择其中任意一个,并将其添加到结果字符串。
请你返回将 s 中字符重新排序后的 结果字符串 。
思路:将字符串分割为数组,写个循环,按照要求处理,处理完一个字符就删除一个字符,注意重复的字符串
/** * @param {string} s * @return {string} */ var sortString = function(s) { const list = s.split("").sort(); let res = ""; let v = ""; let i = 0; while (list.length) { v = ""; i=0; while (i < list.length) { if (list[i] !== v) { res += list[i]; v = list[i]; list.splice(i, 1); } else { i++; } } v = ""; i = list.length - 1; while (i >= 0 && list.length) { if (list[i] !== v) { res += list[i]; v = list[i]; list.splice(i, 1); } i--; } } return res; };题目:
给你一个整数 n,请你返回一个含 n 个字符的字符串,其中每种字符在该字符串中都恰好出现 奇数次 。
返回的字符串必须只含小写英文字母。如果存在多个满足题目要求的字符串,则返回其中任意一个即可。
思路:n如果为奇数,则用a重复;如果偶数,则n-1个a+1 个b
/** * @param {number} n * @return {string} */ var generateTheString = function(n) { if (n % 2) { return "a".repeat(n); } else { return "a".repeat(n - 1) + "b"; } };题目:
给你一个 m * n 的矩阵,矩阵中的数字 各不相同 。请你按 任意 顺序返回矩阵中的所有幸运数。
幸运数是指矩阵中满足同时下列两个条件的元素:
在同一行的所有元素中最小 在同一列的所有元素中最大
思路:记录每一行和每一列的最大数,遍历矩阵,比较即可‘
/** * @param {number[][]} matrix * @return {number[]} */ var luckyNumbers = function(matrix) { const m = matrix.length; const n = matrix[0].length; const row = matrix.map((item) => Math.min(...item)); const column = new Array(n).fill(-Infinity); for (let i = 0; i < m; i++) { for (let j = 0; j < n; j++) { column[j] = Math.max(column[j], matrix[i][j]); } } const res = []; for (let i = 0; i < m; i++) { for (let j = 0; j < n; j++) { if (matrix[i][j] == row[i] && matrix[i][j] == column[j]) { res.push(matrix[i][j]); } } } return res; };题目:
给你两个整数数组 arr1 , arr2 和一个整数 d ,请你返回两个数组之间的 距离值 。
「距离值」 定义为符合此距离要求的元素数目:对于元素 arr1[i] ,不存在任何元素 arr2[j] 满足 |arr1[i]-arr2[j]| <= d
思路:依次遍历
/** * @param {number[]} arr1 * @param {number[]} arr2 * @param {number} d * @return {number} */ var findTheDistanceValue = function(arr1, arr2, d) { return arr1.filter((item) => { return arr2.every((i) => Math.abs(i - item) > d); }).length; };