我是靠谱客的博主 悲凉含羞草,最近开发中收集的这篇文章主要介绍js解leetcode(44)-简单,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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)-简单所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部