最小差
最小差
给定两个整数数组 a 和 b,计算具有最小差绝对值的一对数值(每个数组中取一个值),并返回该对数值的差
输入:{1, 3, 15, 11, 2}, {23, 127, 235, 19, 8}输出:3,即数值对(11, 8)
1234567891011121314var smallestDifference = function (a, b) { const compare = (x, y) => x - y; a.sort(compare); b.sort(compare); let m = a.length, n = b.length, i = 0, j = 0; let ans = Infinity; while (i < m && j < n) { let x = a[i], y = b[j], delta = Math.abs(x - y); ans = Math.min(ans, delta); if (x > y) j++; ...
最接近的三数之和
最接近的三数之和
给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在恰好一个解。
输入:nums = [-1,2,1,-4], target = 1输出:2解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2)。
输入:nums = [0,0,0], target = 1输出:0解释:与 target 最接近的和是 0(0 + 0 + 0 = 0)。
123456789101112131415161718192021222324var threeSumClosest = function (nums, target) { nums.sort((a, b) => a - b); let res = nums[0] + nums[1] + nums[nums.length - 1]; for (let i = 0; i < nums.length - 2; i++) { ...
最小K个数
最小 K 个数
设计一个算法,找出数组中最小的 k 个数。以任意顺序返回这 k 个数均可。
输入: arr = [1,3,5,7,2,4,6,8], k = 4输出: [1,2,3,4]
123456789101112var smallestK = function(arr, k) { const n = arr.length; function comperFn(a,b){ return a-b; } arr.sort(comperFn); let arrary=[]; for(let i=0;i<k;i++){ arrary.push(arr[i]); } return arrary;};
字符至少出现 K 次的子字符串 I
字符至少出现 K 次的子字符串 I
给你一个字符串 s 和一个整数 k,在 s 的所有子字符串中,请你统计并返回 至少有一个 字符 至少出现 k 次的子字符串总数。子字符串 是字符串中的一个连续、 非空 的字符序列。
输入: s = “abacb”, k = 2输出: 4解释:符合条件的子字符串如下:“aba”(字符 ‘a’ 出现 2 次)。“abac”(字符 ‘a’ 出现 2 次)。“abacb”(字符 ‘a’ 出现 2 次)。“bacb”(字符 ‘b’ 出现 2 次)。
1234567891011121314151617var numberOfSubstrings = function (s, k) { let ans = 0; const n = s.length; let book = new Array(26).fill(0); for (let i = j = 0; j < n; j++) { let code_j = s[j].charCodeAt(0) - 97; book[code_j ...
找出加密后的字符串
找出加密后的字符串
给你一个字符串 s 和一个整数 k。请你使用以下算法加密字符串:对于字符串 s 中的每个字符 c,用字符串中 c 后面的第 k 个字符替换 c(以循环方式)。返回加密后的字符串。
输入: s = “dart”, k = 3输出: “tdar”解释:对于 i = 0,’d’ 后面的第 3 个字符是 ‘t’。对于 i = 1,’a’ 后面的第 3 个字符是 ‘d’。对于 i = 2,’r’ 后面的第 3 个字符是 ‘a’。对于 i = 3,’t’ 后面的第 3 个字符是 ‘r’。
1234var getEncryptedString = function(s, k) { const remainder = k % s.length; return s.substring(remainder) + s.substring(0, remainder);};
两个数对之间的最大乘积差
两个数对之间的最大乘积差
两个数对 (a, b) 和 (c, d) 之间的 乘积差 定义为 (a _ b) - (c _ d) 。例如,(5, 6) 和 (2, 7) 之间的乘积差是 (5 _ 6) - (2 _ 7) = 16 。给你一个整数数组 nums ,选出四个 不同的 下标 w、x、y 和 z ,使数对 (nums[w], nums[x]) 和 (nums[y], nums[z]) 之间的 乘积差 取到 最大值 。返回以这种方式取得的乘积差中的 最大值 。
输入:nums = [5,6,2,7,4]输出:34解释:可以选出下标为 1 和 3 的元素构成第一个数对 (6, 7) 以及下标 2 和 4 构成第二个数对 (2, 4)乘积差是 (6 _ 7) - (2 _ 4) = 34
输入:nums = [4,2,5,9,7,4,8]输出:64解释:可以选出下标为 3 和 6 的元素构成第一个数对 (9, 8) 以及下标 1 和 5 构成第二个数对 (2, 4)乘积差是 (9 _ 8) - (2 _ 4) = 64
1234var maxProductDifferenc ...
雪糕的最大数量
雪糕的最大数量
夏日炎炎,小男孩 Tony 想买一些雪糕消消暑。商店中新到 n 支雪糕,用长度为 n 的数组 costs 表示雪糕的定价,其中 costs[i] 表示第 i 支雪糕的现金价格。Tony 一共有 coins 现金可以用于消费,他想要买尽可能多的雪糕。注意:Tony 可以按任意顺序购买雪糕。给你价格数组 costs 和现金量 coins ,请你计算并返回 Tony 用 coins 现金能够买到的雪糕的 最大数量 。你必须使用计数排序解决此问题。
输入:costs = [1,3,2,4,1], coins = 7输出:4解释:Tony 可以买下标为 0、1、2、4 的雪糕,总价为 1 + 3 + 2 + 1 = 7
输入:costs = [10,6,8,7,7,8], coins = 5输出:0解释:Tony 没有足够的钱买任何一支雪糕。
12345678910111213141516171819202122var maxIceCream = function (costs, coins) { let map = new Map(), count = ...
拼车
拼车
车上最初有 capacity 个空座位。车 只能 向一个方向行驶(也就是说,不允许掉头或改变方向)给定整数 capacity 和一个数组 trips , trip[i] = [numPassengersi, fromi, toi] 表示第 i 次旅行有 numPassengersi 乘客,接他们和放他们的位置分别是 fromi 和 toi 。这些位置是从汽车的初始位置向东的 里数。当且仅当你可以在所有给定的行程中接送所有乘客时,返回 true,否则请返回 false。
输入:trips = [[2,1,5],[3,3,7]], capacity = 4输出:false
输入:trips = [[2,1,5],[3,3,7]], capacity = 5输出:true
12345678910111213141516var carPooling = function(trips, capacity) { // [num_passengers, start_location, end_location] // [0, 1, 2, 3, 4] // ...
仅含置位位的最小整数
仅含置位位的最小整数
给你一个正整数 n。返回 大于等于 n 且二进制表示仅包含 置位 位的 最小 整数 x 。置位 位指的是二进制表示中值为 1 的位。
输入: n = 5输出: 7解释:7 的二进制表示是 “111”。
输入: n = 10输出: 15解释:15 的二进制表示是 “1111”。
1234567var smallestNumber = function(n) { let x = 1; while (x < n) { x = x * 2 + 1; } return x;};
替换为数位和以后的最小元素
替换为数位和以后的最小元素
给你一个整数数组 nums 。请你将 nums 中每一个元素都替换为它的各个数位之 和 。请你返回替换所有元素以后 nums 中的 最小 元素。
输入:nums = [10,12,13,14]输出:1解释:nums 替换后变为 [1, 3, 4, 5] ,最小元素为 1 。
输入:nums = [1,2,3,4]输出:1解释:nums 替换后变为 [1, 2, 3, 4] ,最小元素为 1 。
12345678910111213141516var minElement = function (nums) { let minSum = Infinity; for (let num of nums) { minSum = Math.min(minSum, getDigitsSum(num)); } return minSum;};var getDigitsSum = function (num) { let sum = 0; while (num > ...