数组异或操作
数组异或操作
给你两个整数,n 和 start 。数组 nums 定义为:nums[i] = start + 2*i(下标从 0 开始)且 n == nums.length 。请返回 nums 中所有元素按位异或(XOR)后得到的结果。
输入:n = 5, start = 0
输出:8解释:数组 nums 为 [0, 2, 4, 6, 8],其中 (0 ^ 2 ^ 4 ^ 6 ^ 8) = 8 。“^” 为按位异或 XOR 运算符。
输入:n = 4, start = 3
输出:8解释:数组 nums 为 [3, 5, 7, 9],其中 (3 ^ 5 ^ 7 ^ 9) = 8.
1234567891011121314function xorN(n) { switch (n % 4) { case 0: return n; case 1: return 1; case 2: return n + 1; default: return 0; }}var xorOpera ...
整数转换英文表示
整数转换英文表示
将非负整数 num 转换为其对应的英文表示。
输入:num = 123
输出:”One Hundred Twenty Three”
输入:num = 12345
输出:”Twelve Thousand Three Hundred Forty Five”
输入:num = 1234567
输出:”One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven”
12345678910111213141516171819202122232425262728293031323334353637383940414243444546// 朴素var numberToWords = function(num) { if (!num) return 'Zero'; const numMap = {1: 'One', 2: 'Two', 3: 'Three', 4: 'F ...
两整数相加
两整数相加
给你两个整数 num1 和 num2,返回这两个整数的和。
输入:num1 = 12, num2 = 5
输出:17解释:num1 是 12,num2 是 5 ,它们的和是 12 + 5 = 17 ,因此返回 17 。
1234// 朴素var sum = function(num1, num2) { return num1 + num2};
长度最小的子数组
长度最小的子数组
给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其总和大于等于 target 的长度最小的子数组[numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。
输入:target = 7, nums = [2,3,1,2,4,3]
输出:2解释:子数组 [4,3] 是该条件下的长度最小的子数组。
12345678910111213141516171819202122232425var minSubArrayLen = function(target, nums) { /** * 从头开始找出大于等于目标值的子数组,并计算长度,之后再开始从头减去,子数组向右滑动 */ let start = 0;//子数组的初始索引 let end = 0;//子数组的末尾索引,也需要从0开始遍历,等与目标值时更新一次末尾值 let sum = 0;//用于计算子数组内和 let arrL ...
按身高排序
按身高排序
给你一个字符串数组 names ,和一个由 互不相同 的正整数组成的数组 heights 。两个数组的长度均为 n 。对于每个下标 i,names[i] 和 heights[i] 表示第 i 个人的名字和身高。请按身高 降序 顺序返回对应的名字数组 names 。
输入:names = [“Mary”,”John”,”Emma”], heights = [180,165,170]
输出:[“Mary”,”Emma”,”John”]解释:Mary 最高,接着是 Emma 和 John 。
123456789101112131415var sortPeople = function(names, heights) { let res = []; let obj = {}; // 将两个数组合并成以height[i]为key的集合 for (let i = 0; i < heights.length; i++) { obj[heights[i]] = names[i]; } // 利用集合默认根据ke ...
与对应负数同时存在的最大正整数
与对应负数同时存在的最大正整数
给你一个 不包含 任何零的整数数组 nums ,找出自身与对应的负数都在数组中存在的最大正整数 k 。返回正整数 k ,如果不存在这样的整数,返回 -1 。
输入:nums = [-1,2,-3,3]
输出:3解释:3 是数组中唯一一个满足题目要求的 k 。
1234567891011var findMaxK = function(nums) { let k = -1; for (const x of nums) { for (const y of nums) { if (-x === y) { k = Math.max(k, x); } } } return k;};
K 和数对的最大数目
K 和数对的最大数目
给你一个整数数组 nums 和一个整数 k 。每一步操作中,你需要从数组中选出和为 k 的两个整数,并将它们移出数组。返回你可以对数组执行的最大操作数。
输入:nums = [1,2,3,4], k = 5
输出:2解释:开始时 nums = [1,2,3,4]:
移出 1 和 4 ,之后 nums = [2,3]
移出 2 和 3 ,之后 nums = []不再有和为 5 的数对,因此最多执行 2 次操作。
123456789101112131415161718192021var maxOperations = function(nums, k) { nums.sort((a, b) => a - b) let count = 0 let l = 0 let r = nums.length - 1 while (l < r) { let num = nums[l] + nums[r] if (num > k) { r-- } else if (num < ...
反转每对括号间的子串
反转每对括号间的子串
判定字符是否唯一
输入:s = “(abcd)”
输出:”dcba”
输入:s = “(u(love)i)”
输出:”iloveu”解释:先反转子字符串 “love” ,然后反转整个字符串。
12345678910111213141516171819202122232425var reverseParentheses = function(s) { s = s.split('') let stack = []//把索引存储起来 for (let i = 0; i < s.length; i++) { if (s[i] == '(') { stack.push(i) } if (s[i] == ')') { let pre = stack.pop() myReverse(pre + 1, i - 1) ...
判断通过操作能否让字符串相等 II
判断通过操作能否让字符串相等 II
给你两个字符串 s1 和 s2 ,两个字符串长度都为 n ,且只包含 小写 英文字母。你可以对两个字符串中的 任意一个 执行以下操作 任意 次:选择两个下标 i 和 j ,满足 i < j 且 j - i 是 偶数,然后 交换 这个字符串中两个下标对应的字符。如果你可以让字符串 s1 和 s2 相等,那么返回 true ,否则返回 false 。
输入:s1 = “abcdba”, s2 = “cabdab”
输出:true解释:我们可以对 s1 执行以下操作:
选择下标 i = 0 ,j = 2 ,得到字符串 s1 = “cbadba” 。
选择下标 i = 2 ,j = 4 ,得到字符串 s1 = “cbbdaa” 。
选择下标 i = 1 ,j = 5 ,得到字符串 s1 = “cabdab” = s2 。
123456789101112131415161718192021222324252627282930313233var checkStrings = function(s1, s2) { // 0 2, 0 4 ...
既不是最小值也不是最大值
既不是最小值也不是最大值
给你一个整数数组 nums ,数组由 不同正整数 组成,请你找出并返回数组中 任一 既不是 最小值 也不是 最大值 的数字,如果不存在这样的数字,返回 -1 。返回所选整数。
输入:nums = [3,2,1,4]
输出:2解释:在这个示例中,最小值是 1 ,最大值是 4 。因此,2 或 3 都是有效答案。
输入:nums = [1,2]
输出:-1解释:由于不存在既不是最大值也不是最小值的数字,我们无法选出满足题目给定条件的数字。因此,不存在答案,返回 -1 。
1234567var findNonMinOrMax = function(nums) { if (nums.length <= 2) return -1; nums = [...new Set(nums)]; if (nums.length <= 2) return -1; nums.sort((a, b) => a - b); return nums[1];};