交换数字
交换数字
编写一个函数,不用临时变量,直接交换numbers = [a, b]中a与b的值。
输入: numbers = [1,2]
输出: [2,1]
123456var swapNumbers = function(numbers) { numbers[0]=numbers[0]^numbers[1] numbers[1]=numbers[0]^numbers[1] numbers[0]=numbers[0]^numbers[1] return numbers};
合并排序的数组
合并排序的数组
给定两个排序后的数组 A 和 B,其中 A 的末端有足够的缓冲空间容纳 B。 编写一个方法,将 B 合并入 A 并排序。初始化 A 和 B 的元素数量分别为 m 和 n。
输入:A = [1,2,3,0,0,0], m = 3B = [2,5,6], n = 3
输出: [1,2,2,3,5,6]
12345var merge = function(A, m, B, n) { while(n){ A[m+n-1] = !m||A[m-1]<=B[n-1]?B[n---1]:A[m---1] }};
最佳直线
最佳直线
给定一个二维平面及平面上的 N 个点列表 Points,其中第 i 个点的坐标为 Points[i]=[Xi,Yi]。请找出一条直线,其通过的点的数目最多。设穿过最多点的直线所穿过的全部点编号从小到大排序的列表为 S,你仅需返回[S[0],S[1]]作为答案,若有多条直线穿过了相同数量的点,则选择 S[0]值较小的直线返回,S[0]相同则选择 S[1]值较小的直线返回。
输入: [[0,0],[1,1],[1,0],[2,0]]
输出: [0,2]解释: 所求直线穿过的 3 个点的编号为[0,2,3]
123456789101112131415161718192021222324252627282930313233343536var bestLine = function(points) { var inLine = function (p0, p1, p2) { return (p1[1] - p0[1]) * (p2[0] - p0[0]) == (p1[0] - p0[0]) * (p2[1] - p0[1]) ...
不用加号的加法
不用加号的加法
设计一个函数把两个数字相加。不得使用 + 或者其他算术运算符。
输入: a = 1, b = 1
输出: 2
1234567var add = function(a, b) { if(a == 0) return b if(b == 0) return a let sumA = a^b; let sumB = (a & b) << 1; return add(sumA,sumB)};
阶乘尾数
阶乘尾数
设计一个算法,算出 n 阶乘有多少个尾随零。
输入: 3
输出: 0
解释: 3! = 6, 尾数中没有零。
输入: 5
输出: 1解释: 5! = 120, 尾数中有 1 个零.
1234567var trailingZeroes = function(n) { let res = 0 while(n >= 5) { res += (n /= 5)|0 } return res};
最大数值
最大数值
编写一个方法,找出两个数字 a 和 b 中最大的那一个。不得使用 if-else 或其他比较运算符。
输入: a = 1, b = 2
输出: 2
1234var maximum = function(a, b) { // 两数和 + 两数差绝对值 的一半 return ((a+b)+Math.abs(a-b)) / 2};
寻找文件副本
寻找文件副本
设备中存有 n 个文件,文件 id 记于数组 documents。若文件 id 相同,则定义为该文件存在副本。请返回任一存在副本的文件 id。
输入:documents = [2, 5, 3, 0, 5, 0]
输出:0 或 5
123456789var findRepeatDocument = function(documents) { let s=new Set(); for(var i in documents){ var curLenth=s.size; s.add(documents[i]); if(s.size==curLenth) return documents[i]; }};
库存管理 II
库存管理 II
仓库管理员以数组 stock 形式记录商品库存表,其中 stock[i] 表示对应商品库存余量。请返回库存余量最少的 cnt 个商品余量,返回 顺序不限。
输入:stock = [2,5,7,4], cnt = 1
输出:[2]
输入:stock = [0,2,3,6], cnt = 2
输出:[0,2] 或 [2,0]
1234var inventoryManagement = function(stock, cnt) { stock.sort((a, b)=> a-b) return stock.slice(0, cnt)};
库存管理
库存管理
仓库管理员以数组 stock 形式记录商品库存表。stock[i] 表示商品 id,可能存在重复。请返回库存表中数量大于 stock.length / 2 的商品 id。
输入: stock = [6, 1, 3, 1, 1, 1]
输出: 11234567891011121314var inventoryManagement = function(nums) { // 找到长度的一半 const middle = nums.length >> 1; // 存放数组元素出现的次数 let countMap = {}; for(let index = 0; index < nums.length; index ++) { const num = nums[index]; const numCount = !countMap[num] ? 1 : countMap[num] + 1; if (numCount > middle) { return num; & ...
训练计划 I
训练计划 I
教练使用整数数组 actions 记录一系列核心肌群训练项目编号。为增强训练趣味性,需要将所有奇数编号训练项目调整至偶数编号训练项目之前。请将调整后的训练项目编号以 数组 形式返回。
输入:actions = [1,2,3,4,5]
输出:[1,3,5,2,4]
解释:为正确答案之一
1234567891011121314151617181920var trainingPlan = function(nums) { let l = 0; let r = nums.length-1; while(l<r){ //奇数 if((nums[l] & 1)){ l++; continue } //偶数 else if(!(nums[r] & 1)){ r--; continue } [nums ...