最小公共值
最小公共值
给你两个整数数组 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 ...
增减字符串匹配
增减字符串匹配
由范围 [0,n] 内所有整数组成的 n + 1 个整数的排列序列可以表示为长度为 n 的字符串 s ,其中:如果 perm[i] < perm[i + 1] ,那么 s[i] == ‘I’如果 perm[i] > perm[i + 1] ,那么 s[i] == ‘D’给定一个字符串 s ,重构排列 perm 并返回它。如果有多个有效排列 perm,则返回其中 任何一个 。
输入:s = “IDID”输出:[0,4,1,3,2]
输入:s = “III”输出:[0,1,2,3]
12345678910111213var diStringMatch = function(s) { const n = s.length, ans = new Array() let left = 0, right = n for(let i = 0; i < n; i++) { if(s.charCodeAt(i) === 'I'.charCodeAt(0)) { ...
交换后字典序最小的字符串
交换后字典序最小的字符串
给你一个仅由数字组成的字符串 s,在最多交换一次 相邻 且具有相同 奇偶性 的数字后,返回可以得到的字典序最小的字符串。如果两个数字都是奇数或都是偶数,则它们具有相同的奇偶性。例如,5 和 9、2 和 4 奇偶性相同,而 6 和 9 奇偶性不同。
输入: s = “45320”输出: “43520”解释:s[1] == ‘5’ 和 s[2] == ‘3’ 都具有相同的奇偶性,交换它们可以得到字典序最小的字符串。
输入: s = “001”输出: “001”
12345678910var getSmallestString = function(s) { let arr=s.split("")//将字符串转成数组,方便操作 for(let i=1;i<arr.length;i++){//从前向后遍历数组 if(((arr[i]%2===0&&arr[i-1]%2===0)||(arr[i]%2!==0&&arr[i-1]%2!==0))&&a ...
字符串中的第一个唯一字符
字符串中的第一个唯一字符
给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。
输入: s = “leetcode”输出: 0
输入: s = “loveleetcode”输出: 2
123456789101112131415161718192021var firstUniqChar = function(s) { // 创建一个哈希表对象 let map = new Map() // 统计次数 for (let i = 0; i < s.length; i++) { let word = s.charAt(i) let val = map.get(word) if (map.has(word)) { map.set(word, val + 1) } else { map.set(word, 1) } } / ...
稀疏数组搜索
稀疏数组搜索
编写一种方法,对字符串数组进行排序,将所有稀疏数组搜索合在一起。变位词是指字母相同,但排列不同的字符串。注意:本题相对原题稍作修改
输入: words = [“at”, “”, “”, “”, “ball”, “”, “”, “car”, “”, “”,”dad”, “”, “”], s = “ta”输出:-1说明: 不存在返回-1。
输入:words = [“at”, “”, “”, “”, “ball”, “”, “”, “car”, “”, “”,”dad”, “”, “”], s = “ball”输出:4
12345678910111213141516var findString = function(words, s) { let [low, high] = [0, words.length - 1]; while (low <= high) { let mid = (low + high) >> 1; // 处理空字符串 while (mid > lo ...