最小和分割
最小和分割
给你一个正整数 num ,请你将它分割成两个非负整数 num1 和 num2 ,满足:num1 和 num2 直接连起来,得到 num 各数位的一个排列。换句话说,num1 和 num2 中所有数字出现的次数之和等于 num 中所有数字出现的次数。num1 和 num2 可以包含前导 0 。请你返回 num1 和 num2 可以得到的和的 最小 值。注意:num 保证没有前导 0 。num1 和 num2 中数位顺序可以与 num 中数位顺序不同。
输入:num = 4325输出:59解释:我们可以将 4325 分割成 num1 = 24 和 num2 = 35 ,和为 59 ,59 是最小和。
输入:num = 687输出:75解释:我们可以将 687 分割成 num1 = 68 和 num2 = 7 ,和为最优值 75 。
12345678var splitNum = function(num) { const s = num.toString().split('').sort(); const a = [0, 0]; ...
斐波那契数
斐波那契数
斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:F(0) = 0,F(1) = 1F(n) = F(n - 1) + F(n - 2),其中 n > 1给定 n ,请计算 F(n) 。答案需要取模 1e9+7(1000000007) ,如计算初始结果为:1000000008,请返回 1。
输入:n = 2输出:1解释:F(2) = F(1) + F(0) = 1 + 0 = 1
输入:n = 3输出:2解释:F(3) = F(2) + F(1) = 1 + 1 = 2
123456789var fib = function(n) { let n1 = 0, n2 = 1, sum; for(let i = 0; i < n; i++){ sum = (n1 + n2) % 1000000007; n1 = n2; n2 = sum; } return n1; ...
二进制数转字符串
二进制数转字符串
二进制数转字符串。给定一个介于 0 和 1 之间的实数(如 0.72),类型为 double,打印它的二进制表达式。如果该数字无法精确地用 32 位以内的二进制表示,则打印“ERROR”。
输入:0.625输出:”0.101”
输入:0.1输出:”ERROR”提示:0.1 无法被二进制准确表示
12345678910var printBin = function(num) { let ans = '0.' while (num && ans.length <= 32) { num = num * 2; const k = num % 2 >> 0; ans += k; num -= k; } return ans.length > 32 ? 'ERROR' : ans;};
动态口令
动态口令
某公司门禁密码使用动态口令技术。初始密码为字符串 password,密码更新均遵循以下步骤:设定一个正整数目标值 target将 password 前 target 个字符按原顺序移动至字符串末尾请返回更新后的密码字符串。
输入: password = “s3cur1tyC0d3”, target = 4输出: “r1tyC0d3s3cu”
输入: password = “lrloseumgh”, target = 6输出: “umghlrlose”
123456789101112131415var dynamicPassword = function(password, target) { let res = []; let start = s.length - n; let index = 0; for(let i = 0; i < s.length; i++) { if(i < n) { res[start] = s[i]; start+ ...
点名
点名
某班级 n 位同学的学号为 0 ~ n-1。点名结果记录于升序数组 records。假定仅有一位同学缺席,请返回他的学号。
输入: records = [0,1,2,3,5]输出: 4
输入: records = [0, 1, 2, 3, 4, 5, 6, 8]输出: 7
1234567891011121314var takeAttendance = function(records) { let left = 0 let right = records.length - 1 let mid = left + ((right - left) >> 1) while(left <= right){ if(mid === records[mid]){ left = mid + 1 } else { right = mid - 1 } mid = left + ((right - left) >> 1) } return ...
计数质数
计数质数
给定整数 n ,返回 所有小于非负整数 n 的质数的数量 。
输入:n = 10输出:4解释:小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。
123456789101112131415var countPrimes = function(n) { let count = 0; let signs = new Uint8Array(n); for (let i = 2; i < n; i++) { if (!signs[i - 1]) { count++; for (let j = i * i; j <= n; j += i) { signs[j - 1] = true; } } } return count;};
最小差
最小差
给定两个整数数组 a 和 b,计算具有最小差绝对值的一对数值(每个数组中取一个值),并返回该对数值的差
输入:{1, 3, 15, 11, 2}, {23, 127, 235, 19, 8}输出:3,即数值对(11, 8)
1234567891011121314var smallestDifference = function (a, b) { const compare = (x, y) => x - y; a.sort(compare); b.sort(compare); let m = a.length, n = b.length, i = 0, j = 0; let ans = Infinity; while (i < m && j < n) { let x = a[i], y = b[j], delta = Math.abs(x - y); ans = Math.min(ans, delta); if (x > y) j++; ...
最接近的三数之和
最接近的三数之和
给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在恰好一个解。
输入:nums = [-1,2,1,-4], target = 1输出:2解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2)。
输入:nums = [0,0,0], target = 1输出:0解释:与 target 最接近的和是 0(0 + 0 + 0 = 0)。
123456789101112131415161718192021222324var threeSumClosest = function (nums, target) { nums.sort((a, b) => a - b); let res = nums[0] + nums[1] + nums[nums.length - 1]; for (let i = 0; i < nums.length - 2; i++) { ...
最小K个数
最小 K 个数
设计一个算法,找出数组中最小的 k 个数。以任意顺序返回这 k 个数均可。
输入: arr = [1,3,5,7,2,4,6,8], k = 4输出: [1,2,3,4]
123456789101112var smallestK = function(arr, k) { const n = arr.length; function comperFn(a,b){ return a-b; } arr.sort(comperFn); let arrary=[]; for(let i=0;i<k;i++){ arrary.push(arr[i]); } return arrary;};
字符至少出现 K 次的子字符串 I
字符至少出现 K 次的子字符串 I
给你一个字符串 s 和一个整数 k,在 s 的所有子字符串中,请你统计并返回 至少有一个 字符 至少出现 k 次的子字符串总数。子字符串 是字符串中的一个连续、 非空 的字符序列。
输入: s = “abacb”, k = 2输出: 4解释:符合条件的子字符串如下:“aba”(字符 ‘a’ 出现 2 次)。“abac”(字符 ‘a’ 出现 2 次)。“abacb”(字符 ‘a’ 出现 2 次)。“bacb”(字符 ‘b’ 出现 2 次)。
1234567891011121314151617var numberOfSubstrings = function (s, k) { let ans = 0; const n = s.length; let book = new Array(26).fill(0); for (let i = j = 0; j < n; j++) { let code_j = s[j].charCodeAt(0) - 97; book[code_j ...