
算法
文章平均质量分 84
love666666shen
Golang、Python、Java、Scala学习者,对Golang、大数据领域、深度学习等方面的知识比较感兴趣,志同道合的博友可以多多交流、相互学习、每天进步一点点!!!
展开
-
面试常见题型之【滑动窗口】解题模板与示例
概述算法面试过程中,经常会遇到求解满足某种条件的子串问题,对于这种类型的题,一般可以使用双指针或滑动窗口解答,滑动窗口问题可以认为是一种特殊的双指针。什么是滑动窗口在学习计算机网络时,在TCP协议中,为了进行拥塞控制,提出使用滑动窗口进行优化。滑动窗口,顾名思义是使用一个大小可变的窗口,通过控制窗口左右两端移动的方向和移动步调,来达到找出要查找子序列的目的。左右两端点一般是向前滑动,可以是右端固定时,左端向前滑动;或者左端固定时,右端向前滑动。滑动窗口法,可以用来解决一些查找满足一定条件的连续区间原创 2022-01-26 22:56:35 · 1243 阅读 · 0 评论 -
面试过程中常见回溯套路总结
回溯算法概述什么是回溯算法回溯算法,又称为“试探法”、“穷举法”,是暴力算法的一种形式,也是一同通用的解题思路,按选优条件向前搜索,以达到目标。在解决问题时,每进行一步,都是抱着试试看的态度,如果发现当前选择非最优,或者按照当前路径走下去达不到目标,需要回退上一步的操作,重新进行下一轮选择。这种走不通就回退,再重新选择,直到遍历所有路径的方法就是回溯算法。通俗地说,回溯法就是对每一个决策进行遍历的过程,可以理解为通过选择不同的树杈寻找到目标,一个树杈一个树杈地去尝试遍历。如果选择的当前路径不能达到目原创 2022-01-13 22:17:10 · 726 阅读 · 0 评论 -
一个模板解决二叉树路径相关问题
面试过程中,经常会被问到二叉树的遍历、从根节点到各叶子节点所有路径、是否存在某条路径和为某个值等算法题。针对这些题,都可以使用二叉树的深度优先遍历模板加以解决。解题模板使用深度优先遍历,将从根节点到叶子节点经过的路径的值放在path切片中,当到达叶子节点时将各路径放入二维切片的指针变量res中,然后递归调用左子树、右子树。// 深度优先遍历(递归实现方式)// 注意:这里path一维切片不能用指针类型,二维切片使用指针类型的切片,否则得不到想要的结果func dfsPaths(curNode *原创 2022-01-06 22:28:49 · 957 阅读 · 0 评论 -
面试中几种常见的二分查找问题及解题模板总结
二分查找问题,想必对于开发人员来说都不陌生,但是想要准确而又熟练地写出二分查找及其变形问题的算法代码,对许多人来说,可能并不是一件很容易的事。二分查找几种变形二分查找,又称为⼆分搜索,一般有 以下几种变形题:1. 查找第⼀次出现的等于给定目标值的元素(或元素下标)2. 查找最后一次出现的等于给定目标值的元素(或元素下标)3. 查找第⼀个⼤于等于给定值的元素(或元素下标)4. 查找最后⼀个⼩于等于给定值的元素(或元素下标)5. 查找给定目标值出现的起始和终止元素对应的位置(第1和第2种类型的结合原创 2021-06-05 17:28:46 · 501 阅读 · 0 评论 -
使用BFS广度优先搜索解决常见算法题
剑指 Offer 32 - I. 从上到下打印二叉树题目描述从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。 例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回:[3,9,20,15,7] 提示:节点总数 <= 1000来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/cong-shang-da原创 2021-05-21 18:29:27 · 206 阅读 · 0 评论 -
栈和队列的互相模拟
剑指 Offer 09. 用两个栈实现队列题目描述用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead操作返回 -1 )示例 1:输入:["CQueue","appendTail","deleteHead","deleteHead"][[],[3],[],[]]输出:[null,null,3,-1]示例 2:输入:["CQueu.原创 2021-05-21 18:27:59 · 168 阅读 · 0 评论 -
回溯算法解题套路总结
概述当问题是要求满足某种性质(约束条件)的所有解或最优解时,往往使用回溯法。它有“通用解题法”之美誉。回溯算法实际上是一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现不满足求解条件时,就撤销上一步操作,进行“回溯”返回,尝试别的路径。回溯算法也叫试探法,它是一种系统地搜索问题的解的方法。回溯法解题套路回溯法,虽然是一种对结果类似枚举的遍历过程,效率可能不太高,但是在其他方法无法解决的时候,它可能就是一种常用的解题思路。回溯法可以解决哪些问题,如何使用它解决问题,有没有解题模原创 2021-04-05 18:43:10 · 1357 阅读 · 0 评论 -
常见面试算题题中的滑动窗口问题
LeetCode1004. 最大连续1的个数 III题目描述给定一个由若干 0 和 1 组成的数组 A,最多可以将数组A中的 K 个元素的值从 0 变成 1 ,返回仅包含 1 的最长(连续)子数组的长度。示例 1:输入:A = [1,1,1,0,0,0,1,1,1,1,0], K = 2输出:6解释:[1,1,1,0,0,1,1,1,1,1,1]粗体数字从 0 翻转到 1,最长的子数组长度为 6。示例 2:输入:A = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1原创 2021-03-17 23:07:40 · 560 阅读 · 0 评论 -
面试中常见的堆栈问题
借助一个辅助栈对栈中元素排序题目描述一个栈中元素的类型为整形,现在想将该栈从顶到底按从大到小的顺序排序,只许申请一个栈,除此之外,可以申请新的变量,但不能申请额外的数据结构。如何完成排序?解题思路将栈排序的栈记为arr,申请的辅助栈记为res。在待排序栈arr上执行pop操作,弹出的元素记为stackTop。(1)如果stackTop大于或等于res的栈顶元素,则将stackTop直接压入res栈;(2)如果stackTop小于res的栈顶元...原创 2021-03-17 14:19:16 · 342 阅读 · 0 评论 -
使用快排思想解决算法面试题
快速排序主要思想1. 在数组中选一个元素作为基准(通常选用数组第一个元素作为基准);2. 将数组中小于基准数的数据移到基准数左边,大于基准数的移到右边;3. 对于基准数左、右两边的数组,不断重复以上两个过程,直到每个子集只有一个元素,即为全部有序。代码实现func quickSort(arr []int, begin, end int) { if begin > end { return } base := arr[begin] // 选择基准,一般选择数组首元原创 2021-03-17 00:03:24 · 347 阅读 · 0 评论 -
常见链表问题
剑指 Offer 18. 删除链表的节点题目描述给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。示例说明示例 1:输入: head = [4,5,1,9], val = 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例 2:输入: head = [4,5,1,9], val = 1输出: [4,5,9]解释: 给定你链表中值为 1 的第三个原创 2021-03-14 13:13:47 · 257 阅读 · 0 评论 -
双指针解决数组链表问题
使用双指针解决数组问题剑指 Offer 21. 调整数组顺序使奇数位于偶数前面题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。示例输入:nums =[1,2,3,4]输出:[1,3,2,4]注:[3,1,2,4] 也是正确的答案之一。提示:0 <= nums.length <= 500001 <= nums[i] <= 10000来源:力扣(Leet...原创 2021-03-10 23:55:42 · 263 阅读 · 0 评论 -
二叉树的前序、中序、后序递归及非递归遍历、层次遍历
二叉树的组成与定义一棵二叉树由根结点、左子树和右子树三部分组成。前序、中序、后续遍历次序若使用D、L、R 分别标识根结点、左子树、右子树,则二叉树的遍历方式有 6 种:DLR、DRL、LDR、LRD、RDL、RLD。由于先遍历左子树和先遍历右子树在算法设计上没有本质区别,所以,只讨论三种方式:DLR--前序遍历(根在前,从左往右,一棵树的根永远在左子树前面,左子树又永远在右子树前面 );LDR--中序遍历(根在中,从左往右,一棵树的左子树永远在根前面,根永远在右子树前面);LRD--后序遍历(根原创 2021-02-03 22:57:50 · 1002 阅读 · 0 评论 -
LeetCode二叉树层次遍历套路
102. 二叉树的层次遍历题目来源:https://leetcode-cn.com/problems/binary-tree-level-order-traversal/难易程度:中等题目描述给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。例如:给定二叉树: [3,9,20,null,null,15,7],3/ 9 20/ 15 7...原创 2020-03-12 21:59:21 · 359 阅读 · 0 评论 -
链表高频面试题(包括反转、合并、相交、分割、环长等)
1.整个链表翻转https://leetcode-cn.com/problems/reverse-linked-list/1.1 题目描述反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?1.2 ...原创 2020-02-05 20:27:42 · 477 阅读 · 2 评论 -
“八皇后问题”及其在方阵排列中的使用
1 问题引入最近,项目leader给布置了一个小的练习题:求一个给定矩阵的所有不同行,不同列的数据的组合情况。刚开始,没细想,到编程的时候怎么调试就是无法获得所有符合条件的情况。纠结了一两天,在网上算法学习群里面发起了提问,有好心的网友提示像“八皇后问题”,可以使用回溯的思想去解答,于是就搜索了这些相关的问题。看了几篇文章,慢慢地也有了些眉目。通过这次经历,对算法也有了重新的认识:以前,总是感觉算法原创 2018-02-01 16:22:26 · 1157 阅读 · 0 评论 -
动态规划:从新手到专家
作者:Hawstein出处:http://hawstein.com/posts/dp-novice-to-advanced.html声明:本文采用以下协议进行授权: 自由转载-非商用-非衍生-保持署名|Creative Commons BY-NC-ND 3.0 ,转载请注明作者及出处。前言本文翻译自TopCoder上的一篇文章: Dynamic Programming:转载 2017-09-11 20:56:14 · 355 阅读 · 0 评论