- 299. 猜数字游戏">299. 猜数字游戏
- 412. Fizz Buzz">412. Fizz Buzz
- 506. 相对名次">506. 相对名次
- 539. 最小时间差">539. 最小时间差
- 553. 最优除法">553. 最优除法
- 537. 复数乘法">537. 复数乘法
- 592. 分数加减运算">592. 分数加减运算
- 640. 求解方程">640. 求解方程
- 38. 外观数列">38. 外观数列
- 443. 压缩字符串">443. 压缩字符串
- 8. 字符串转换整数 (atoi)">8. 字符串转换整数 (atoi)
- 13. 罗马数字转整数">13. 罗马数字转整数
- 12. 整数转罗马数字">12. 整数转罗马数字
- 273. 整数转换英文表示">273. 整数转换英文表示
- 165. 比较版本号">165. 比较版本号
- 481. 神奇字符串">481. 神奇字符串
299. 猜数字游戏
思路
先用 map 存起来, 再遍历一次把位置对的index删掉,然后 再把奶牛计算出来
代码
/*** @param {string} secret* @param {string} guess* @return {string}*/var getHint = function(secret, guess) {const map = new Map();// 遍历完成mapfor(let i = 0; i < secret.length; i++) {let cur = secret[i];if (map.has(cur)) {map.get(cur).push(i);} else {map.set(cur, [i]);}}let a = 0, b = 0, usedIdx = []for(let i = 0; i < guess.length; i++) {let cur = guess[i];// 如果在secret中if (map.has(cur)) {let cArr = map.get(cur)// 如果有当前索引并且位置相同,就把当前索引删除if (map.get(cur).includes(i)) {let idx = cArr.indexOf(i)usedIdx.push(i)cArr.splice(idx, 1)a ++}if (!cArr.length) {map.delete(cur)}}}// console.log(map)for(let i = 0; i < guess.length; i++) {let cur = guess[i];// 如果在secret中,都是位置不对的if (usedIdx.includes(i)) continue// console.log(cur, map.has(cur))if (map.has(cur)) {let cArr = map.get(cur)if (cArr.length) {b++;}cArr.shift()if (!cArr.length) {map.delete(cur)}}}return `${a}A${b}B`};
复杂度分析
时间复杂度 #card=math&code=O%28N%29)
空间复杂度 #card=math&code=O%28N%29)
412. Fizz Buzz
思路
遍历就完了
代码
/*** @param {number} n* @return {string[]}*/var fizzBuzz = function(n) {const ret = [];let idx = 1;while(idx <= n) {let m5 = idx % 5 === 0, m3 = idx % 3 === 0if (m3 && m5) {ret.push('FizzBuzz')} else if (m3) {ret.push('Fizz')} else if (m5) {ret.push('Buzz')} else {ret.push(`${idx}`)}idx++}return ret;};
复杂度分析
时间复杂度 #card=math&code=O%28N%29)
空间复杂度
506. 相对名次
思路
先排序,然后用map记下每个分数对应的名词,再遍历元数据
代码
/*** @param {number[]} score* @return {string[]}*/var findRelativeRanks = function(score) {let ret = score.slice(), map = {};ret.sort((a, b)=> b - a)map[ret[0]] = "Gold Medal"map[ret[1]] = "Silver Medal"map[ret[2]] = "Bronze Medal"for(let i = 3; i < ret.length; i ++) {let cur = ret[i]map[cur] = `${i+1}`}let res = []for(let i = 0; i < score.length; i ++) {let cur = score[i]res[i] = map[cur]}return res;};
复杂度分析
时间复杂度 #card=math&code=O%28N%29)
空间复杂度 #card=math&code=O%28N%29)
