题型:单选20 简答4 编程2
思路:循环队列模拟
注意:返回的是序号,数组中写下的是Nx(某整数)
function fn(arr) { // N 人数 start 从这个人开始 N1 第一次传几个人 dequeue 所有人在白板上写下的数 let N = arr[0], start = arr[1], N1 = arr[2], dequeue = arr.slice(3).map((item, index) => [item, index+1]) if (N < start) return -1; for (let i = 0; i < start-1; i++) { dequeue.push(dequeue.shift()); } // 人数等于1则停止游戏 while (dequeue.length > 1) { for (let i = 0; i < N1-1; i++) { dequeue.push(dequeue.shift()); } N1 = dequeue.shift()[0]; } return dequeue[0][1]; }
思路:字符串分割,翻转,拼接
// str2为子字符串,str1一定包含子字符串,子字符串不旋转,如果含有多个,则匹配第一个 function fn(str1, str2) { if (str1.length > 200) return; let index = str1.indexOf(str2); let left = str1.slice(0, index); let right = str1.slice(index + str2.length); // 以下部分可能纯纯想多了,对通过率毫无贡献... let start = false, end = false; if (right.indexOf(str2) === 0) { start = true; } if (right.lastIndexOf(str2) === right.length - str2.length) { end = true; } let res1 = swap(left); let res2 = right.indexOf(str2) === -1 ? swap(right) :right.split(str2).map(item => swap(item)).reverse().join(str2); res2 = start ? str2 + res2 : res2; res2 = end ? res2 + str2 : res2; return res2 + str2 + res1; } function swap(s) { return [...s].reverse().join(''); }
感觉方方面面都考虑到了,但一直通过91%累了...
#绿盟#