算法
nicocoyo
放些总结在博客里,请大家多多指教
展开
-
剑指Offer3-12(10道题)
本文仅供自己复习使用以下的题目均采用多解法方式1、剑指 Offer 03. 数组中重复的数字a、用集合set用集合应该是最好想到的一个方法 /** * @param {number[]} nums * @return {number} */ var findRepeatNumber = function(nums) { let set = new Set() for(let i = 0; i < nums.length; i++) { i原创 2020-11-06 16:53:06 · 187 阅读 · 0 评论 -
剑指offer22-31(10道题)
本文仅供自己复习用1、剑指 Offer 22. 链表中倒数第k个节点a、快慢指针 /** * @param {ListNode} head * @param {number} k * @return {ListNode} */ var getKthFromEnd = function(head, k) { let quick = head, slow = head for(let i = 0; i < k; i++) { quick =原创 2020-11-06 16:52:57 · 127 阅读 · 0 评论 -
剑指offer13-21(10道题)
本文仅供自己复习用1、剑指 Offer 13. 机器人的运动范围a、BFS如图红色表示入队列顺序,可以看出其实每一步只是往右走和往下走,而且会有重复 /** * @param {number} m * @param {number} n * @param {number} k * @return {number} */ var movingCount = function(m, n, k) { let queue = ['0,0'] let res =原创 2020-11-06 16:52:49 · 157 阅读 · 0 评论 -
关于TopK(leetcode215)
本文仅供自己复习原本按常理来说这个应该收纳到算法总结里,结果一看那个算法总结太长了哈哈哈,找时间重新理一下那个文档TopK类问题一般就是指找第K个最大或者最小a、排序V8在7.0前的排序,如果数只有10个以下就是用的插入排序O(n2),如果是以上就用快速排序O(nlogn),但是快速排序是不稳定的不稳定的意思是如果在一个数组中【1,0,1】排序后需要让相等的值他们的先后位置跟排序前一样,如第一个1必须在第二个1后面,但是快排以及选择排序是非稳定的,只有冒泡、插入、归并是稳定排序所以在7.原创 2020-11-06 16:52:31 · 243 阅读 · 0 评论 -
详解二分搜索及使用到的情况
仅供自己复习来源于算法总结的分治a题的更详细解释(当时写算法总结的时候还有点迷糊,这里倒是弄懂了)关于二分搜索有一篇文章写得很好以及李威大佬的二分搜索一、二分搜索详解(leetcode704)前提是有序数组通过移动左右两个指针以及中间的那个指针来进行查找时间复杂度为O(logN)重点①:查询中间的数经常会看到多种方法,如let mid = Math.floor((left + right) / 2)let mid = left + Math.floor((right - left) /原创 2020-11-06 16:52:05 · 395 阅读 · 0 评论 -
滑动窗口详解及其应用
先放这儿,7.1再写原创 2020-11-06 16:51:37 · 2220 阅读 · 0 评论 -
树相关
1、路径总和 /** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } */ /** * @param {TreeNode} root * @param {number} sum * @return {boolean} */ var hasPathSum =原创 2020-11-06 16:51:24 · 86 阅读 · 0 评论 -
使用动态规划解决字符串问题
字符串、回文数、求相同,这些其实天然地就和动态规划很贴合的1、最长重复子数组 /** * @param {number[]} A * @param {number[]} B * @return {number} */ var findLength = function(A, B) { let dp = new Array(A.length + 1) for(let i = 0; i < dp.length; i++) { dp[i] = n原创 2020-11-06 16:50:52 · 466 阅读 · 0 评论 -
使用动态规划解决走路径问题
不多说,直接上题1、不同路径 /** * @param {number} m * @param {number} n * @return {number} */ var uniquePaths = function(m, n) { let dp = new Array(m) for(let i = 0; i < dp.length; i++) { dp[i] = new Array(n).fill(1) } for(le原创 2020-11-06 16:50:38 · 512 阅读 · 0 评论 -
算法总结
1、五大基本算法1)分治算法具体来讲就是分而治之,把一个大问题分成很多相同或相似的小问题,小问题再分,直到无法再分,所有小问题的结果合起来就是最终结果常见的有排序中的快速排序和归并排序,分治经常和递归一起提及①分治适合的情况a、该问题缩小到一定规模就可以解决b、该问题可以分成若干小问题c、该问题若干小问题的解可以合并成这个问题的答案d、该问题分出来的若干小问题都是独立的若满足a、...原创 2020-07-10 14:30:39 · 836 阅读 · 0 评论