当前位置: 代码迷 >> 综合 >> leetcode刷题记录(41)-简单
  详细解决方案

leetcode刷题记录(41)-简单

热度:36   发布时间:2024-02-27 18:20:45.0

1.统计位数为偶数的数字

题目:给你一个整数数组 nums,请你返回其中位数为 偶数 的数字的个数。

/*** @param {number[]} nums* @return {number}*/
var findNumbers = function(nums) {return nums.filter((i) => !(`${i}`.length % 2)).length;
};

2.将每个元素替换为右侧最大元素

题目:

给你一个数组 arr ,请你将每个元素用它右边最大的元素替换,如果是最后一个元素,用 -1 替换。

完成所有替换操作后,请你返回这个数组。

思路:从右往左遍历,用一个变量记录当前位置右侧的数的最大值

/*** @param {number[]} arr* @return {number[]}*/
var replaceElements = function(arr) {const l = arr.length;const res = new Array(l);let max = -1;res[l - 1] = max;if (l < 2) return res;for (let i = l - 2; i >= 0; i--) {max = arr[i + 1] > max ? arr[i + 1] : max;res[i] = max;}return res;
};

3.和为零的N个唯一整数

题目:给你一个整数 n,请你返回 任意 一个由 n 个 各不相同 的整数组成的数组,并且这 n 个数相加和为 0 。

思路:第一个数为负数,第二个数为从1到N-1,累计求和即可,或者直接用数学公式计算也行

/*** @param {number} n* @return {number[]}*/
var sumZero = function(n) {const res = new Array(n);let v = 0;for (let i = 1; i < n; i++) {v += i;res[i] = i;}res[0] = -1 * v;return res;
};
/*** @param {number} n* @return {number[]}*/
var sumZero = function(n) {const res = new Array(n);res[0]=-1 * (n*(n-1))/2for (let i = 1; i < n; i++) {res[i] = i;}return res;
};

4.解码字母到整数映射

题目:

给你一个字符串 s,它由数字('0' - '9')和 '#' 组成。我们希望按下述规则将 s 映射为一些小写英文字符:

字符('a' - 'i')分别用('1' - '9')表示。
字符('j' - 'z')分别用('10#' - '26#')表示。 
返回映射之后形成的新字符串。

题目数据保证映射始终唯一。

思路:观察可知:如果某个字符是#,那么它前面两个数字代表了一个数字;否则当前字符代表一个数字。因为#在数字后面,所以从后往前遍历,记录每一个数字,然后转换成字母

/*** @param {string} s* @return {string}*/
var freqAlphabets = function(s) {const l = s.length;let stack = [];for (let i = l - 1; i >= 0; i--) {if (s[i] == "#") {stack.unshift(s.slice(i - 2, i));i -= 2;} else {stack.unshift(s[i]);}}return stack.map((i) => {return String.fromCharCode(+i + 96);}).join("");
};

5.解压缩编码列表

题目:

给你一个以行程长度编码压缩的整数列表 nums 。

考虑每对相邻的两个元素 [freq, val] = [nums[2*i], nums[2*i+1]] (其中 i >= 0 ),每一对都表示解压后子列表中有 freq 个值为 val 的元素,你需要从左到右连接所有子列表以生成解压后的列表。

请你返回解压后的列表。

思路:依次拼接

/*** @param {number[]} nums* @return {number[]}*/
var decompressRLElist = function(nums) {const l = nums.length / 2;const res = [];for (let i = 0; i < l; i++) {res.push(...new Array(nums[2 * i]).fill(nums[2 * i + 1]));}return res;
};