n 的第 k 个因子
n 的第 k 个因子
给你两个正整数 n 和 k 。如果正整数 i 满足 n % i == 0 ,那么我们就说正整数 i 是整数 n 的因子。考虑整数 n 的所有因子,将它们 升序排列 。请你返回第 k 个因子。如果 n 的因子数少于 k ,请你返回 -1 。
输入:n = 12, k = 3
输出:3
解释:因子列表包括 [1, 2, 3, 4, 6, 12],第 3 个因子是 3 。
输入:n = 7, k = 2
输出:7解释:因子列表包括 [1, 7] ,第 2 个因子是 7 。
1234567891011var kthFactor = function(n, k) { for (let i = 1, count = 0; i <= n; i++) { if (n % i === 0) { count++; if (count === k) { return i; } } ...
反转两次的数字
反转两次的数字
反转 一个整数意味着倒置它的所有位。例如,反转 2021 得到 1202 。反转 12300 得到 321 ,不保留前导零 。给你一个整数 num ,反转 num 得到 reversed1 ,接着反转 reversed1 得到 reversed2 。如果 reversed2 等于 num ,返回 true ;否则,返回 false 。
输入:num = 526
输出:true解释:反转 num 得到 625 ,接着反转 625 得到 526 ,等于 num 。
输入:num = 1800
输出:false解释:反转 num 得到 81 ,接着反转 81 得到 18 ,不等于 num 。
123var isSameAfterReversals = function(num) { return !num || num % 10};
数组元素积的符号
数组元素积的符号
已知函数 signFunc(x) 将会根据 x 的正负返回特定值:如果 x 是正数,返回 1 。如果 x 是负数,返回 -1 。如果 x 是等于 0 ,返回 0 。给你一个整数数组 nums 。令 product 为数组 nums 中所有元素值的乘积。返回 signFunc(product) 。
输入:nums = [-1,-2,-3,-4,3,2,1]
输出:1解释:数组中所有值的乘积是 144 ,且 signFunc(144) = 1
输入:nums = [1,5,0,2,-3]
输出:0解释:数组中所有值的乘积是 0 ,且 signFunc(0) = 0
12345678var arraySign = function(nums) { let t = true for (let i = 0; i < nums.length; i++) { if (nums[i] === 0) return 0 if (nums[i] < 0) t = !t } return t ? 1 : -1 ...
数组异或操作
数组异或操作
给你两个整数,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 < ...