随笔分类 - 力扣-程序员面试金典题目整理
摘要:部分排序 思路:双指针,但是该双指针并不是相互关联的双指针。 /** * @param {number[]} array * @return {number[]} */ var subSort = function(array) { if(!array.length){ return [-1, -1
阅读全文
摘要:整数英语的表示 思路:三位一写。 /** * @param {number} num * @return {string} */ var numberToWords = function(num) { const singles = ["", "One", "Two", "Three", "Four
阅读全文
摘要:跳水板 代码: /** * @param {number} shorter * @param {number} longer * @param {number} k * @return {number[]} */ var divingBoard = function(shorter, longer,
阅读全文
摘要:最小差 思路: 先将两个数组升序排序,然后使用双指针逐个进行比较。 /** * @param {number[]} a * @param {number[]} b * @return {number} */ var smallestDifference = function(a, b) { a.so
阅读全文
摘要:井字游戏 思路: 朴素求解 先判断横、竖、两个对角线 如果前面判断无法得出结果,用函数countSpace判断是否有空格,有代表没有填满,输出Pending、否则输出Draw。 代码: /** * @param {string[]} board * @return {string} */ var t
阅读全文
摘要:交换数字 /** * @param {number[]} numbers * @return {number[]} */ var swapNumbers = function(numbers) { numbers.push(numbers.splice(0,1)) return numbers };
阅读全文
摘要:数字流的秩 代码: var StreamRank = function() { this.arr = [] }; /** * @param {number} x * @return {void} */ StreamRank.prototype.track = function(x) { this.a
阅读全文
摘要:堆箱子 思路: 首先进行排序,规则为: 如果宽度不相同,按照宽度从小到大排序。 如果宽度相同,深度不相同,按照深度从大到小排序。 宽度和深度都相同,高度从大到小排序。 采用动态规划进行求解: 计算以当前盒子为顶部盒子时的最大堆叠高度。 从前往后遍历每一个盒子,对于每一个盒子i,遍历i之后的所有盒子j
阅读全文
摘要:变为词组 思路: 哈希模拟 /** * @param {string[]} strs * @return {string[][]} */ var groupAnagrams = function(strs) { // {'aet':["ate","eat","tea"]} let hash = ne
阅读全文
摘要:八皇后 直接上代码: /** * @param {number} n * @return {string[][]} */ var solveNQueens = function(n) { // 创建一个长度为n的一维数组,其元素值为'.',然后再利用map()方法将其转化成一个n * n的二维数组b
阅读全文
摘要:颜色填充 思路:使用深搜就可解决 对坐标点(sr,sc)进行填充。 然后在此处进行扩散。 代码: function fill(image, sr, sc, newColor) { // 记录初始颜色值 const oldColor = image[sr][sc]; // 如果新颜色与初始颜色相同则无
阅读全文
摘要:无重复字符全排列 思路: 使用回溯进行解决。 主要是定义一个backRound函数,表示回溯。 注意回溯出口:就是长度等于S的长度,且没有存储。 代码: var permutation = function(S) { // 定义函数 permutation,接收字符串 S 作为参数 let res
阅读全文
摘要:递归乘法 直接上代码: /** * @param {number} A * @param {number} B * @return {number} */ var multiply = function(A, B) { if(A 0 || B 0)return 0 arr = [0] for(let
阅读全文
摘要:魔术索引 思路: 直接代码 function findMagicIndex(nums) { let i = 0 if(!nums.length){ return -1 } else{ while(i <= nums.length && i !== nums[i]){ i ++ } let min =
阅读全文
摘要:三步问题 思路: 通过题意很明显就是动态规划问题,而且本问题很简单(是两步楼梯的进阶版),构造动态转换方程为: 解释一下:在第i层楼梯,到达这一层的方式可以从第i-1层上来,也可以在i-2层上来,也可以从i-3上来,因此相
阅读全文
摘要:配位交换 思路: 分别保留偶数为和奇数位,然后分别右移和左移。 /** * @param {number} num * @return {number} */ var exchangeBits = function(num) { // 用来保留奇数位 const add = 0x55555555 /
阅读全文
摘要:下一个数 思路: 求出从最低位的1开始的连续的1的区间 将此区间全部变为0,并将区间左侧的那个0变为1 将第1步取出的区间右移,直到剩下的1的个数减少一个 将第2步和第3步的结果相或 /** * @param {number} num * @return {number[]} */ var find
阅读全文
摘要:二进制转字符串 思路; 使用2成十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出,依次继续。直到积中的整数部分为0,或者整数部分为1,此时0或1为二进制的最后一位。 例: 0.625=(0.101)B 0.625 * 2 = 1.25 取出整数部
阅读全文
摘要:节点间通路 思路:邻接表+递归 实例:n = 3, graph = [[0, 1], [0, 2], [1, 2], [1, 2]], start = 0, target = 2 首先构建邻接表 0->1->2 1->2 然后对每一行递归,查看是否能到达。 此外:还需要创建一个visited记录是否
阅读全文
摘要:零矩阵 思路: 设置两个列表记录哪里需要置零,然后对其改变即可 class Solution: def setZeroes(self, matrix: List[List[int]]) -> None: """ Do not return anything, modify matrix in-pla
阅读全文