js解leetcode(44)-简单

it2023-09-03  70

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 剩余字符中选出 最小 的字符,且该字符比上一个添加的字符大,将它 接在 结果字符串后面。 重复步骤 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; };

3.生成每种字符都是奇数个的字符串

题目:

给你一个整数 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"; } };

4.矩阵中的幸运数

题目:

给你一个 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; };

5.两个数组间的距离值

题目:

给你两个整数数组 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; };

 

最新回复(0)