计数二进制子串
计数二进制子串
给你一个整数数组 nums ,统计并返回在 nums 中同时至少具有一个严格较小元素和一个严格较大元素的元素数目。
输入:s = “00110011”输出:6解释:6 个子串满足具有相同数量的连续 1 和 0 :”0011”、”01”、”1100”、”10”、”0011” 和 “01” 。注意,一些重复出现的子串(不同位置)要统计它们出现的次数。另外,”00110011” 不是有效的子串,因为所有的 0(还有 1 )没有组合在一起。
输入:s = “10101”输出:4解释:有 4 个子串:”10”、”01”、”10”、”01” ,具有相同数量的连续 1 和 0 。
12345678var countBinarySubstrings = function(s) { let arr = s.replace(/10/g, '1 0').replace(/01/g, '0 1').split(/\s/) let n = 0 for(i=0; i< arr.length - 1; i++) ...
元音辅音字符串计数 II
元音辅音字符串计数 II
给你一个字符串 word 和一个 非负 整数 k。返回 word 的子字符串中,每个元音字母(’a’、’e’、’i’、’o’、’u’)至少 出现一次,并且 恰好 包含 k 个辅音字母的子字符串的总数。
输入:word = “aeioqq”, k = 1输出:0解释:不存在包含所有元音字母的子字符串。
输入:word = “aeiou”, k = 0输出:1解释:唯一一个包含所有元音字母且不含辅音字母的子字符串是 word[0..4],即 “aeiou”。
12345678910111213141516171819202122232425262728293031var countOfSubstrings = function (word, k) { const getAns = (word, k) => { const map = new Map(); const s = ['a', 'e', 'i', 'o', ...
最长单词
最长单词
给定一组单词 words,编写一个程序,找出其中的最长单词,且该单词由这组单词中的其他单词组合而成。若有多个长度相同的结果,返回其中字典序最小的一项,若没有符合要求的单词则返回空字符串。
输入: [“cat”,”banana”,”dog”,”nana”,”walk”,”walker”,”dogwalker”]输出: “dogwalker”解释: “dogwalker”可由”dog”和”walker”组成。
12345678910111213141516171819202122232425262728293031323334353637383940var longestWord = function(words) { words.sort((a, b) => { if (!(a.length - b.length)) { return a < b ? 1 : -1 } return a.length - b.length; }); ...
统计桌面上的不同数字
统计桌面上的不同数字
给你一个正整数 n ,开始时,它放在桌面上。在 109 天内,每天都要执行下述步骤:对于出现在桌面上的每个数字 x ,找出符合 1 <= i <= n 且满足 x % i == 1 的所有数字 i 。然后,将这些数字放在桌面上。返回在 10^9 天之后,出现在桌面上的 不同 整数的数目。注意:一旦数字放在桌面上,则会一直保留直到结束。% 表示取余运算。例如,14 % 3 等于 2 。
输入:n = 5输出:4解释:最开始,5 在桌面上。第二天,2 和 4 也出现在桌面上,因为 5 % 2 == 1 且 5 % 4 == 1 。再过一天 3 也出现在桌面上,因为 4 % 3 == 1 。在十亿天结束时,桌面上的不同数字有 2 、3 、4 、5 。
输入:n = 3输出:2解释:因为 3 % 2 == 1 ,2 也出现在桌面上。在十亿天结束时,桌面上的不同数字只有两个:2 和 3 。
123var distinctIntegers = function(n) { return n > 1 ? n - 1 : 1 } ...
最小公共值
最小公共值
给你两个整数数组 nums1 和 nums2 ,它们已经按非降序排序,请你返回两个数组的 最小公共整数 。如果两个数组 nums1 和 nums2 没有公共整数,请你返回 -1 。如果一个整数在两个数组中都 至少出现一次 ,那么这个整数是数组 nums1 和 nums2 公共 的。
输入:nums1 = [1,2,3], nums2 = [2,4]输出:2解释:两个数组的最小公共元素是 2 ,所以我们返回 2 。
输入:nums1 = [1,2,3,6], nums2 = [2,3,4,5]输出:2解释:两个数组中的公共元素是 2 和 3 ,2 是较小值,所以返回 2 。
12345678910111213var getCommon = function (nums1, nums2) { // nums2 = new Set(nums2); // for (const item of nums1) { // if (nums2.has(item)) return item; // } // retur ...
必须拿起的最小连续卡牌数
必须拿起的最小连续卡牌数
给你一个整数数组 cards ,其中 cards[i] 表示第 i 张卡牌的 值 。如果两张卡牌的值相同,则认为这一对卡牌 匹配 。返回你必须拿起的最小连续卡牌数,以使在拿起的卡牌中有一对匹配的卡牌。如果无法得到一对匹配的卡牌,返回 -1 。
输入:cards = [3,4,2,3,4,7]输出:4解释:拿起卡牌 [3,4,2,3] 将会包含一对值为 3 的匹配卡牌。注意,拿起 [4,2,3,4] 也是最优方案。
输入:cards = [1,0,5,3]输出:-1解释:无法找出含一对匹配卡牌的一组连续卡牌。
1234567891011121314151617var minimumCardPickup = function(cards) { const map = {}; for (let i = 0; i < cards.length; i++) { const tmp = map[cards[i]] || []; tmp.push(i); map[c ...
判断一个数字是否可以表示成三的幂的和
判断一个数字是否可以表示成三的幂的和
给你一个整数 n ,如果你可以将 n 表示成若干个不同的三的幂之和,请你返回 true ,否则请返回 false 。对于一个整数 y ,如果存在整数 x 满足 y == 3x ,我们称这个整数 y 是三的幂。
输入:n = 12输出:true解释:12 = 3^1 + 3^2
输入:n = 91输出:true解释:91 = 3^0 + 3^2 + 3^4
123456789var checkPowersOfThree = function(n) { while(n) { if(n % 3 === 2) return false n = Math.floor(n / 3) } return true};
有效三角形的个数
有效三角形的个数
给定一个包含非负整数的数组 nums ,返回其中可以组成三角形三条边的三元组个数。
输入: nums = [2,2,3,4]输出: 3解释:有效的组合是:2,3,4 (使用第一个 2)2,3,4 (使用第二个 2)2,2,3
输入: nums = [4,2,3,4]输出: 4
123456789101112131415161718192021222324252627var triangleNumber = function(nums) { // 数组长度 const len = nums.length; // 升序排序 nums.sort((a, b) => a - b); let res = 0; // k是最大的边,从最右边开始 for (let k = len - 1; k >= 2; k--) { // 定义[0,k)内两个指针 let [left, right] = [0, k - 1]; while (left < right ...
计算力扣银行的钱
计算力扣银行的钱
Hercy 想要为购买第一辆车存钱。他 每天 都往力扣银行里存钱。最开始,他在周一的时候存入 1 块钱。从周二到周日,他每天都比前一天多存入 1 块钱。在接下来每一个周一,他都会比 前一个周一 多存入 1 块钱。给你 n ,请你返回在第 n 天结束的时候他在力扣银行总共存了多少块钱。
输入:n = 4输出:10解释:第 4 天后,总额为 1 + 2 + 3 + 4 = 10 。
输入:n = 10输出:37解释:第 10 天后,总额为 (1 + 2 + 3 + 4 + 5 + 6 + 7) + (2 + 3 + 4) = 37 。注意到第二个星期一,Hercy 存入 2 块钱。
1234var totalMoney = function(n) { const div = Math.floor(n / 7), r = n % 7, m = Math.max(div - 1, 0) return div * (1 + 7) * 7 / 2 + m * (m + 1) * 7 / 2 + (r + 1) * r / 2 + div * r ...
查找共用字符
查找共用字符
给你一个字符串数组 words ,请你找出所有在 words 的每个字符串中都出现的共用字符(包括重复字符),并以数组形式返回。你可以按 任意顺序 返回答案。
输入:words = [“bella”,”label”,”roller”]输出:[“e”,”l”,”l”]
输入:words = [“cool”,”lock”,”cook”]输出:[“c”,”o”]
1234567891011121314151617181920var commonChars = function(words) { let list = [] for(let prop of words[0]){ let flag = words.every(item => { // 第一个条件 return item && item.indexOf(prop) > -1 }) if(flag){ // 符合第一个条件进入 list.push(p ...