删除某些元素后的数组均值
删除某些元素后的数组均值
给你一个整数数组 arr ,请你删除最小 5% 的数字和最大 5% 的数字后,剩余数字的平均值。与 标准答案 误差在 10-5 的结果都被视为正确结果。
输入:arr = [1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3]
输出:2.00000
解释:删除数组中最大和最小的元素后,所有元素都等于 2,所以平均值为 2 。
输入:arr = [6,2,7,5,1,2,0,3,10,2,5,0,5,5,0,8,7,6,8,0]
输出:4.00000
输入:arr = [6,0,7,0,7,5,7,8,3,4,0,7,8,1,6,8,1,1,2,4,8,1,9,5,4,3,8,5,10,8,6,6,1,0,6,10,8,2,3,4]
输出:4.77778
123456789101112131415var trimMean = function(arr) { let len = arr.length, fv = len * 0.05, sum = 0 // 先排序 arr.sort((a, ...
供暖器
供暖器
冬季已经来临。 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖。在加热器的加热半径范围内的每个房屋都可以获得供暖。现在,给出位于一条水平线上的房屋 houses 和供暖器 heaters 的位置,请你找出并返回可以覆盖所有房屋的最小加热半径。注意:所有供暖器 heaters 都遵循你的半径标准,加热的半径也一样。
输入: houses = [1,2,3], heaters = [2]
输出: 1
解释: 仅在位置 2 上有一个供暖器。如果我们将加热半径设为 1,那么所有房屋就都能得到供暖。
输入: houses = [1,2,3,4], heaters = [1,4]
输出: 1
解释: 在位置 1, 4 上有两个供暖器。我们需要将加热半径设为 1,这样所有房屋就都能得到供暖。
123456789101112131415161718192021222324252627282930313233343536373839var findRadius = function(houses, heaters) { heaters = [...hea ...
重排数字的最小值
重排数字的最小值
给你一个整数 num 。重排 num 中的各位数字,使其值 最小化 且不含 任何 前导零。返回不含前导零且值最小的重排数字。注意,重排各位数字后,num 的符号不会改变。
输入:num = 310
输出:103
解释:310 中各位数字的可行排列有:013、031、103、130、301、310 。不含任何前导零且值最小的重排数字是 103 。
输入:num = -7605
输出:-7650
解释:-7605 中各位数字的部分可行排列为:-7650、-6705、-5076、-0567。不含任何前导零且值最小的重排数字是 -7650 。
12345678910111213141516171819202122232425262728293031323334var smallestNumber = function(num) { const nums = []; // 标记是否是负数 let isNeg = false; if (num < 0) { num = -num; isNeg = true; ...
可被三整除的最大和
可被三整除的最大和
给你一个整数数组 nums,请你找出并返回能被三整除的元素最大和。
输入:nums = [3,6,5,1,8]
输出:18
解释:选出数字 3, 6, 1 和 8,它们的和是 18(可被 3 整除的最大和)。
输入:nums = [4]
输出:0
解释:4 不能被 3 整除,所以无法选出数字,返回 0。
12345678910111213141516171819202122232425262728293031var maxSumDivThree = function(nums) { const v = [[], [], []]; for (const num of nums) { v[num % 3].push(num); } v[1].sort((a, b) => b - a); v[2].sort((a, b) => b - a); let ans = 0; const lb = v[1].length; const lc = v[2].le ...
卡车上的最大单元数
卡车上的最大单元数
请你将一些箱子装在 一辆卡车 上。给你一个二维数组 boxTypes ,其中 boxTypes[i] = [numberOfBoxesi, numberOfUnitsPerBoxi] :numberOfBoxesi 是类型 i 的箱子的数量。numberOfUnitsPerBoxi 是类型 i 每个箱子可以装载的单元数量。整数 truckSize 表示卡车上可以装载 箱子 的 最大数量 。只要箱子数量不超过 truckSize ,你就可以选择任意箱子装到卡车上。返回卡车可以装载 单元 的 最大 总数。
输入:boxTypes = [[1,3],[2,2],[3,1]], truckSize = 4
输出:8
解释:箱子的情况如下:
1 个第一类的箱子,里面含 3 个单元。
2 个第二类的箱子,每个里面含 2 个单元。
3 个第三类的箱子,每个里面含 1 个单元。可以选择第一类和第二类的所有箱子,以及第三类的一个箱子。单元总数 = (1 _ 3) + (2 _ 2) + (1 * 1) = 8
12345678910var maximumUnits = func ...
矩阵中战斗力最弱的 K 行
矩阵中战斗力最弱的 K 行
给你一个大小为 m * n 的矩阵 mat,矩阵由若干军人和平民组成,分别用 1 和 0 表示。请你返回矩阵中战斗力最弱的 k 行的索引,按从最弱到最强排序。如果第 i 行的军人数量少于第 j 行,或者两行军人数量相同但 i 小于 j,那么我们认为第 i 行的战斗力比第 j 行弱。军人 总是 排在一行中的靠前位置,也就是说 1 总是出现在 0 之前。
输入:mat =[[1,1,0,0,0],[1,1,1,1,0],[1,0,0,0,0],[1,1,0,0,0],[1,1,1,1,1]],k = 3
输出:[2,0,3]
解释:每行中的军人数目:行 0 -> 2行 1 -> 4行 2 -> 1行 3 -> 2行 4 -> 5
从最弱到最强对这些行排序后得到 [2,0,3,1,4]
1234567891011121314var kWeakestRows = function(mat, k) { let dataMap = new Map(); for (let i=0; i<mat.length; i ...
高度检查器
高度检查器
学校打算为全体学生拍一张年度纪念照。根据要求,学生需要按照 非递减 的高度顺序排成一行。排序后的高度情况用整数数组 expected 表示,其中 expected[i] 是预计排在这一行中第 i 位的学生的高度(下标从 0 开始)。给你一个整数数组 heights ,表示 当前学生站位 的高度情况。heights[i] 是这一行中第 i 位学生的高度(下标从 0 开始)。返回满足 heights[i] != expected[i] 的 下标数量 。
输入:heights = [1,1,4,2,1,3]
输出:3
解释:高度:[1,1,4,2,1,3]预期:[1,1,1,2,3,4]下标 2 、4 、5 处的学生高度不匹配。
输入:heights = [5,1,2,3,4]
输出:5
解释:高度:[5,1,2,3,4]预期:[1,2,3,4,5]所有下标的对应学生高度都不匹配。
123456789var heightChecker = function(heights) { let res = 0; const expected= Ob ...
特殊数组的特征值
特殊数组的特征值
给你一个非负整数数组 nums 。如果存在一个数 x ,使得 nums 中恰好有 x 个元素 大于或者等于 x ,那么就称 nums 是一个 特殊数组 ,而 x 是该数组的 特征值 。注意: x 不必 是 nums 的中的元素。如果数组 nums 是一个 特殊数组 ,请返回它的特征值 x 。否则,返回 -1 。可以证明的是,如果 nums 是特殊数组,那么其特征值 x 是 唯一的 。
输入:nums = [3,5]
输出:2
解释:有 2 个元素(3 和 5)大于或等于 2 。
输入:nums = [0,0]
输出:-1
解释:没有满足题目要求的特殊数组,故而也不存在特征值 x 。如果 x = 0,应该有 0 个元素 >= x,但实际有 2 个。如果 x = 1,应该有 1 个元素 >= x,但实际有 0 个。如果 x = 2,应该有 2 个元素 >= x,但实际有 0 个。x 不能取更大的值,因为 nums 中只有两个元素。
123var specialArray = function(nums) { return ...
检查整数及其两倍数是否存在
检查整数及其两倍数是否存在
给你一个整数数组 arr,请你检查是否存在两个整数 N 和 M,满足 N 是 M 的两倍(即,N = 2 * M)。更正式地,检查是否存在两个下标 i 和 j 满足:
输入:arr = [10,2,5,3]
输出:true
解释:N = 10 是 M = 5 的两倍,即 10 = 2 * 5 。
输入:arr = [7,1,14,11]
输出:true
解释:N = 14 是 M = 7 的两倍,即 14 = 2 * 7 。
123456789var checkIfExist = function(arr) { for(let i = 0; i < arr.length; i++){ let index = arr.indexOf(arr[i] * 2); if(index !== -1 && index !== i){ return true; } } return false; ...
根据数字二进制下 1 的数目排序
根据数字二进制下 1 的数目排序
给你一个整数数组 arr 。请你将数组中的元素按照其二进制表示中数字 1 的数目升序排序。如果存在多个数字二进制中 1 的数目相同,则必须将它们按照数值大小升序排列。请你返回排序后的数组。
输入:arr = [1024,512,256,128,64,32,16,8,4,2,1]
输出:[1,2,4,8,16,32,64,128,256,512,1024]
解释:数组中所有整数二进制下都只有 1 个 1 ,所以你需要按照数值大小将它们排序。
输入:arr = [10000,10000]
输出:[10000,10000]
输入:arr = [2,3,5,7,11,13,17,19]
输出:[2,3,5,17,7,11,13,19]
1234var sortByBits = function(arr) { for(var i = 1, h = [0]; i <= 10000; i++) h[i] = h[i >> 1] + (i & 1) return arr.sort((a, b) =&g ...