整数的各位积和之差
整数的各位积和之差
给你一个整数 n,请你帮忙计算并返回该整数「各位数字之积」与「各位数字之和」的差。
输入:n = 234
输出:15解释:各位数之积 = 2 _ 3 _ 4 = 24各位数之和 = 2 + 3 + 4 = 9结果 = 24 - 9 = 15
输入:n = 4421
输出:21解释:各位数之积 = 4 _ 4 _ 2 * 1 = 32各位数之和 = 4 + 4 + 2 + 1 = 11结果 = 32 - 11 = 21
123456var subtractProductAndSum = function(n) { let arr = n.toString().split(''); let a = eval(arr.join('*')); let b = eval(arr.join('+')); return a-b;};
找到和最大的长度为 K 的子序列
找到和最大的长度为 K 的子序列
给你一个整数数组 nums 和一个整数 k 。你需要找到 nums 中长度为 k 的 子序列 ,且这个子序列的 和最大 。请你返回 任意 一个长度为 k 的整数子序列。子序列 定义为从一个数组里删除一些元素后,不改变剩下元素的顺序得到的数组。
输入:nums = [2,1,3,3], k = 2
输出:[3,3]解释:子序列有最大和:3 + 3 = 6 。
输入:nums = [-1,-2,3,4], k = 3
输出:[-1,3,4]解释:子序列有最大和:-1 + 3 + 4 = 6 。
123456789101112var maxSubsequence = function(nums, k) { nums = nums.map((item,index) => { return { item, index } }) nums = nums.sort((a,b) => b.item - ...
和有限的最长子序列
和有限的最长子序列
给你一个长度为 n 的整数数组 nums ,和一个长度为 m 的整数数组 queries 。返回一个长度为 m 的数组 answer ,其中 answer[i] 是 nums 中 元素之和小于等于 queries[i] 的 子序列 的 最大 长度 。子序列 是由一个数组删除某些元素(也可以不删除)但不改变剩余元素顺序得到的一个数组。注意 ,如果最小值或者最大值有重复元素,可以删除任意一个。
输入:nums = [4,5,2,1], queries = [3,10,21]
输出:[2,3,4]解释:queries 对应的 answer 如下:
子序列 [2,1] 的和小于或等于 3 。可以证明满足题目要求的子序列的最大长度是 2 ,所以 answer[0] = 2 。
子序列 [4,5,1] 的和小于或等于 10 。可以证明满足题目要求的子序列的最大长度是 3 ,所以 answer[1] = 3 。
子序列 [4,5,2,1] 的和小于或等于 21 。可以证明满足题目要求的子序列的最大长度是 4 ,所以 answer[2] = 4 。
输入:nums = ...
将字符串中的元音字母排序
将字符串中的元音字母排序
给你一个下标从 0 开始的字符串 s ,将 s 中的元素重新 排列 得到新的字符串 t ,它满足:所有辅音字母都在原来的位置上。更正式的,如果满足 0 <= i < s.length 的下标 i 处的 s[i] 是个辅音字母,那么 t[i] = s[i] 。元音字母都必须以他们的 ASCII 值按 非递减 顺序排列。更正式的,对于满足 0 <= i < j < s.length 的下标 i 和 j ,如果 s[i] 和 s[j] 都是元音字母,那么 t[i] 的 ASCII 值不能大于 t[j] 的 ASCII 值。请你返回结果字母串。元音字母为 ‘a’ ,’e’ ,’i’ ,’o’ 和 ‘u’ ,它们可能是小写字母也可能是大写字母,辅音字母是除了这 5 个字母以外的所有字母。
输入:s = “lEetcOde”
输出:”lEOtcede”解释:’E’ ,’O’ 和 ‘e’ 是 s 中的元音字母,’l’ ,’t’ ,’c’ 和 ‘d’ 是所有的辅音。将元音字母按照 ASCII 值排序,辅音字母留在原地。
1234567891 ...
检查一个字符串是否可以打破另一个字符串
检查一个字符串是否可以打破另一个字符串
给你两个字符串 s1 和 s2 ,它们长度相等,请你检查是否存在一个 s1 的排列可以打破 s2 的一个排列,或者是否存在一个 s2 的排列可以打破 s1 的一个排列。字符串 x 可以打破字符串 y (两者长度都为 n )需满足对于所有 i(在 0 到 n - 1 之间)都有 x[i] >= y[i](字典序意义下的顺序)。
输入:s1 = “abc”, s2 = “xya”
输出:true解释:”ayx” 是 s2=”xya” 的一个排列,”abc” 是字符串 s1=”abc” 的一个排列,且 “ayx” 可以打破 “abc” 。
输入:s1 = “abe”, s2 = “acd”
输出:false解释:s1=”abe” 的所有排列包括:”abe”,”aeb”,”bae”,”bea”,”eab” 和 “eba” ,s2=”acd” 的所有排列包括:”acd”,”adc”,”cad”,”cda”,”dac” 和 “dca”。然而没有任何 s1 的排列可以打破 s2 的排列。也没有 s2 的排列能打破 s1 的排列。
12345 ...
统计同质子字符串的数目
统计同质子字符串的数目
给你一个字符串 s ,返回 s 中 同质子字符串 的数目。由于答案可能很大,只需返回对 109 + 7 取余 后的结果。同质字符串 的定义为:如果一个字符串中的所有字符都相同,那么该字符串就是同质字符串。子字符串 是字符串中的一个连续字符序列。
输入:s = “abbcccaa”
输出:13解释:同质子字符串如下所列:“a” 出现 3 次。“aa” 出现 1 次。“b” 出现 2 次。“bb” 出现 1 次。“c” 出现 3 次。“cc” 出现 2 次。“ccc” 出现 1 次。3 + 1 + 2 + 1 + 3 + 2 + 1 = 13
123456789101112131415161718var countHomogenous = function(s) { let l=s.length; let res=0; let counter=1; let tmp=s[0]; for(let i=1;i<l+1;i++){ if(s[i]==tmp){ ...
多个数组求交集
多个数组求交集
给你一个二维整数数组 nums ,其中 nums[i] 是由 不同 正整数组成的一个非空数组,按 升序排列 返回一个数组,数组中的每个元素在 nums 所有数组 中都出现过。
输入:nums = [[3,1,2,4,5],[1,2,3,4],[3,4,5,6]]
输出:[3,4]解释: nums[0] = [3,1,2,4,5],nums[1] = [1,2,3,4],nums[2] = [3,4,5,6],在 nums 中每个数组中都出现的数字是 3 和 4 ,所以返回 [3,4] 。
输入:nums = [[1,2,3],[4,5,6]]
输出:[]解释:不存在同时出现在 nums[0] 和 nums[1] 的整数,所以返回一个空列表 [] 。
1234567891011121314var intersection = function(nums) { const map = {} const l = nums.length nums.forEach(item => { item.forEach ...
最小面积矩形
最小面积矩形
给定在 xy 平面上的一组点,确定由这些点组成的矩形的最小面积,其中矩形的边平行于 x 轴和 y 轴。如果没有任何矩形,就返回 0。
输入:[[1,1],[1,3],[3,1],[3,3],[2,2]]
输出:4
输入:[[1,1],[1,3],[3,1],[3,3],[4,1],[4,3]]
输出:2
123456789101112131415161718192021222324var minAreaRect = function(points) { // 1. map; // 2. 左下、右上枚举 points.sort((a,b) => a[0] - b[0]); let m = new Map(); let res = Infinity; for (let [x,y] of points) { if (!m.has(x)) m.set(x, new Set()); m.get(x).add(y); } for (let i=0; i< ...
矩阵中的和
矩阵中的和
给你一个下标从 0 开始的二维整数数组 nums 。一开始你的分数为 0 。你需要执行以下操作直到矩阵变为空:矩阵中每一行选取最大的一个数,并删除它。如果一行中有多个最大的数,选择任意一个并删除。在步骤 1 删除的所有数字中找到最大的一个数字,将它添加到你的 分数 中。请你返回最后的 分数 。
输入:nums = [[7,2,1],[6,4,2],[6,5,3],[3,2,1]]
输出:15解释:第一步操作中,我们删除 7 ,6 ,6 和 3 ,将分数增加 7 。下一步操作中,删除 2 ,4 ,5 和 2 ,将分数增加 5 。最后删除 1 ,2 ,3 和 1 ,将分数增加 3 。所以总得分为 7 + 5 + 3 = 15 。
输入:nums = [[1]]
输出:1解释:我们删除 1 并将分数增加 1 ,所以返回 1 。
123456789101112var matrixSum = function(nums) { for (let row of nums) row.sort((a, b) => a - b); let ...
找出字符串的可整除数组
找出字符串的可整除数组
给你一个下标从 0 开始的字符串 word ,长度为 n ,由从 0 到 9 的数字组成。另给你一个正整数 m 。word 的 可整除数组 div 是一个长度为 n 的整数数组,并满足:如果 word[0,…,i] 所表示的 数值 能被 m 整除,div[i] = 1否则,div[i] = 0返回 word 的可整除数组。
输入:word = “998244353”, m = 3
输出:[1,1,0,0,0,1,1,0,0]
解释:仅有 4 个前缀可以被 3 整除:”9”、”99”、”998244” 和 “9982443” 。
输入:word = “1010”, m = 10
输出:[0,1,0,1]解释:仅有 2 个前缀可以被 10 整除:”10” 和 “1010” 。
123456789var divisibilityArray = function(word, m) { const ans = Array(word.length); let x = 0; for (let i = 0; i < word.l ...