概述
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;
};
最后
以上就是悲凉含羞草为你收集整理的js解leetcode(44)-简单的全部内容,希望文章能够帮你解决js解leetcode(44)-简单所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复