库存管理 II
库存管理 II
仓库管理员以数组 stock 形式记录商品库存表,其中 stock[i] 表示对应商品库存余量。请返回库存余量最少的 cnt 个商品余量,返回 顺序不限。
输入:stock = [2,5,7,4], cnt = 1
输出:[2]
输入:stock = [0,2,3,6], cnt = 2
输出:[0,2] 或 [2,0]
1234var inventoryManagement = function(stock, cnt) { stock.sort((a, b)=> a-b) return stock.slice(0, cnt)};
库存管理
库存管理
仓库管理员以数组 stock 形式记录商品库存表。stock[i] 表示商品 id,可能存在重复。请返回库存表中数量大于 stock.length / 2 的商品 id。
输入: stock = [6, 1, 3, 1, 1, 1]
输出: 11234567891011121314var inventoryManagement = function(nums) { // 找到长度的一半 const middle = nums.length >> 1; // 存放数组元素出现的次数 let countMap = {}; for(let index = 0; index < nums.length; index ++) { const num = nums[index]; const numCount = !countMap[num] ? 1 : countMap[num] + 1; if (numCount > middle) { return num; & ...
训练计划 I
训练计划 I
教练使用整数数组 actions 记录一系列核心肌群训练项目编号。为增强训练趣味性,需要将所有奇数编号训练项目调整至偶数编号训练项目之前。请将调整后的训练项目编号以 数组 形式返回。
输入:actions = [1,2,3,4,5]
输出:[1,3,5,2,4]
解释:为正确答案之一
1234567891011121314151617181920var trainingPlan = function(nums) { let l = 0; let r = nums.length-1; while(l<r){ //奇数 if((nums[l] & 1)){ l++; continue } //偶数 else if(!(nums[r] & 1)){ r--; continue } [nums ...
判定是否互为字符重排
判定是否互为字符重排
给定两个由小写字母组成的字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。
输入: s1 = “abc”, s2 = “bca”
输出: true
输入: s1 = “abc”, s2 = “bad”
输出: false
1234567var CheckPermutation = function(s1, s2) { return reorder(s1) === reorder(s2); function reorder(s: string): string { return s.split("").sort((a, b) => a.charCodeAt(0) - b.charCodeAt(0)).join(""); }};
文物朝代判断
文物朝代判断
展览馆展出来自 13 个朝代的文物,每排展柜展出 5 个文物。某排文物的摆放情况记录于数组 places,其中 places[i] 表示处于第 i 位文物的所属朝代编号。其中,编号为 0 的朝代表示未知朝代。请判断并返回这排文物的所属朝代编号是否连续(如遇未知朝代可算作连续情况)。
输入: places = [0, 6, 9, 0, 7]
输出: True
输入: places = [7, 8, 9, 10, 11]
输出: True
12345678910111213141516var checkDynasty = function(nums) { let set = new Set(); let max = 0, min = 14; for (let a of nums) { // 跳过大小王; if (a == 0) continue; max = Math.max(a, max); min = Math.min(a, min); // 若有重复,提前返回 false if (set. ...
变位词组
变位词组
编写一种方法,对字符串数组进行排序,将所有变位词组合在一起。变位词是指字母相同,但排列不同的字符串。注意:本题相对原题稍作修改
输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”],
输出:[[“ate”,”eat”,”tea”],[“nat”,”tan”],[“bat”]]
12345678var groupAnagrams = function(strs) { let map = new Map() for( let str of strs ){ let key = str.split('').sort().join('') map.has(key) ? map.get(key).push(str) : map.set(key,[str]) } return [...map.values()]};
峰与谷
峰与谷
在一个整数数组中,“峰”是大于或等于相邻整数的元素,相应地,“谷”是小于或等于相邻整数的元素。例如,在数组{5, 8, 4, 2, 3, 4, 6}中,{8, 6}是峰, {5, 2}是谷。现在给定一个整数数组,将该数组按峰与谷的交替顺序排序。
输入: [5, 3, 1, 2, 3]
输出: [5, 1, 3, 2, 3]
12345678var wiggleSort = function(nums) { nums.sort((a, b) => a - b); const ans = [...nums]; let i = 0, left = 0, right = nums.length - 1, flag = 1; while (i < nums.length) { nums[i++] = ans[flag++ % 2 === 0 ? left++ : right--]; }};
交换和
交换和
给定两个整数数组,请交换一对数值(每个数组中取一个数值),使得两个数组所有元素的和相等。返回一个数组,第一个元素是第一个数组中要交换的元素,第二个元素是第二个数组中要交换的元素。若有多个答案,返回任意一个均可。若无满足条件的数值,返回空数组。
输入: array1 = [4, 1, 2, 1, 1, 2], array2 = [3, 6, 3, 3]
输出: [1, 3]
输入: array1 = [1, 2, 3], array2 = [4, 5, 6]
输出: []
123456789101112131415161718192021var findSwapValues = function(array1, array2) { // 计算当前的和 let sum1 = array1.reduce((sum, item) => sum + item); let sum2 = array2.reduce((sum, item) => sum + item); // 处理数组,去除相同的元素 array1 = [...new Set(a ...
判定字符是否唯一
判定字符是否唯一
判定字符是否唯一
输入: s = “leetcode”
输出: false
输入: s = “abc”
输出: true
123var isUnique = function(astr) { return new Set(astr).size === astr.length};
消失的数字
消失的数字
数组 nums 包含从 0 到 n 的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在 O(n)时间内完成吗?
输入:[3,0,1]
输出:2
输入:[9,6,4,2,3,5,7,0,1]
输出:8
1234567var missingNumber = function(nums) { // 等差公式求0到n的和,减去nums总和,剩下就是缺少的。 let n = nums.length; let sum = n*(n+1)/2; nums.forEach(el => sum -= el); return sum;};