5197. 最小绝对差
给你个整数数组 arr
,其中每个元素都 不相同。
请你找到所有具有最小绝对差的元素对,并且按升序的顺序返回。
示例 1:
输入:arr = [4,2,1,3] 输出:[[1,2],[2,3],[3,4]]
示例 2:
输入:arr = [1,3,6,10,15] 输出:[[1,3]]
示例 3:
输入:arr = [3,8,-10,23,19,-4,-14,27] 输出:[[-14,-10],[19,23],[23,27]]
提示:
2 <= arr.length <= 10^5
-10^6 <= arr[i] <= 10^6
/** * @param {number[]} arr * @return {number[][]} */ var minimumAbsDifference = function(arr) { let res = []; arr.sort((a, b)=>a-b); let c = Infinity; for(let i=0; i<arr.length-1; i++){ let val = arr[i+1]-arr[i]; if(val<c) { c = val res.length = 0; } if(val === c){ let temp = []; temp.push(arr[i], arr[i+1]); res.push(temp) } } return res } /* var minimumAbsDifference = function(arr) { arr.sort((a, b)=>a-b); let map = new Map(); let c = Infinity; for(let i=0; i<arr.length-1; i++){ let val = arr[i+1]-arr[i]; if(val<c) c = val if(map.has(val)){ let v = map.get(val); v.push([arr[i], arr[i+1]]) map.set(val, v) }else{ map.set(val, [[arr[i], arr[i+1]]]) } } for(let [key, val] of map.entries()){ if(key ===c){ return val } } }; */
未解决:
https://leetcode-cn.com/contest/weekly-contest-155
https://coding.imooc.com/lesson/315.html#mid=22379
5198. 丑数 III
请你帮忙设计一个程序,用来找出第 n
个丑数。
丑数是可以被 a
或 b
或 c
整除的正整数。
示例 1:
输入:n = 3, a = 2, b = 3, c = 5 输出:4 解释:The ugly numbers are 2, 3, 4, 5, 6, 8, 9, 10... The 3rd is 4.
示例 2:
输入:n = 4, a = 2, b = 3, c = 4 输出:6 解释:丑数序列为 2, 3, 4, 6, 8, 9, 12... 其中第 4 个是 6。
示例 3:
输入:n = 5, a = 2, b = 11, c = 13 输出:10 解释:丑数序列为 2, 4, 6, 8, 10, 11, 12, 13... 其中第 5 个是 10。
示例 4:
输入:n = 1000000000, a = 2, b = 217983653, c = 336916467 输出:1999999984
提示:
1 <= n, a, b, c <= 10^9
1 <= a * b * c <= 10^18
- 本题结果在
[1, 2 * 10^9]
的范围内
/** * @param {number} n * @param {number} a * @param {number} b * @param {number} c * @return {number} */ // class Solution { // long gcd(long a, long b) { // if (b == 0) return a; // return gcd(b, a%b); // } // public int nthUglyNumber(int n, int a, int b, int c) { // long l = 0; // long r = Integer.MAX_VALUE; // while (l + 1 < r) { // long m = (l + r) / 2; // long cnt = m / a; // cnt += m / b; // cnt += m / c; // cnt -= m / ((long)a * b / gcd(a, b)); // cnt -= m / ((long)a * c / gcd(a, c)); // cnt -= m / ((long)b * c / gcd(b, c)); // long tmp = (long)a * b / gcd(a, b); // cnt += m / (tmp*c / gcd(c, tmp)); // if (cnt < n) { // l = m; // } else { // r = m; // } // } // return (int)r; // } // } // 最小公倍数 var gcd=function(a, b) { if (b == 0) return a; return gcd(b, a%b); } var nthUglyNumber = function(n, a, b, c) { let l=0; let r = Infinity; while(l + 1 < r){ let m = parseInt((l+r)/2); let cnt = parseInt(m / a); cnt += m / b; cnt += m / c; cnt -= m / (a * b / gcd(a, b)); cnt -= m / (a * c / gcd(a, c)); cnt -= m / (b * c / gcd(b, c)); let tmp = a * b / gcd(a, b); cnt += m / (tmp*c / gcd(c, tmp)); if (cnt < n) { l = m; } else { r = m; } } return r } /* var nthUglyNumber = function(n, a, b, c) { let s = Math.min(a, b, c) let res = [1]; let i2=0,i3=0,i5=0,i=0; while(i++<n){ let tmp=Math.min(a*res[i2],Math.min(b*res[i3],c*res[i5])); res.push(tmp); if(tmp==a*res[i2]) i2++; if(tmp==b*res[i3]) i3++; if(tmp==c*res[i5]) i5++; } return res.pop() // 超出时间限制 // let s = Math.min(a, b, c), count=0; // while(true){ // if(s%a===0 || s%b===0 || s%c===0) count++; // if(count === n) return s // s++ // } }; */