算法与数据结构
文章平均质量分 62
guihunkun
这个作者很懒,什么都没留下…
展开
-
LeetCode刷题经验之从入门到放弃
文章目录前言刷题方法定期总结刷题经验前言LeetCodehttps://leetcode-cn.com/problemset/all/虽然刷题一直饱受诟病,但熟能生巧,有些东西就是需要刻意练习,程序不写永远不是自己的,刷题网站众多,但提到更多的总离不开 LeetCode 。关键是如何找到合适自己的刷题方法,让学习锻炼更加高效。刷题方法第一遍:思考,不要看任何参考答案,可以尝试暂时不考虑时间和空间效率,将题解出。第二遍:结合前面自己做的,思考能否优化时间和空间。第三遍:结合其他人的题解官原创 2021-08-28 11:35:30 · 248 阅读 · 0 评论 -
Python实现二分查找树
文章目录前言程序1. 二分查找2. 二分搜索树3. 二分搜索树辅助函数4. main函数结果前言本文用Python语言实现二分查找,以及二分搜索树,以及二叉树的前序中序后序遍历,并增加辅助测试函数验证,具体完整代码可以去我的 GitHub 网站下载。程序1. 二分查找# 二分查找 有序数组arr 查找targetdef binarySearch(arr, n, target): # 在arr[l...r]中查找target l = 0 r = n - 1 whil原创 2021-08-07 16:21:50 · 320 阅读 · 0 评论 -
常用排序算法的Python实现汇总
文章目录常用排序算法的Python实现汇总堆排序归并排序快速排序常用排序算法的Python实现汇总之前总结了一篇C++实现各排序算法的文章:常用排序算法的C++实现汇总现改用Python实现。程序源文件可以在我的GitHub下载得到。堆排序import mathdef buildMaxHeap(arr): for i in range(math.floor(len(arr)/2),-1,-1): heapify(arr,i)def heapify(arr原创 2021-07-30 13:13:18 · 101 阅读 · 0 评论 -
动态规划相关面试算法题总结
文章目录前言算法题1. LeetCode 64 : 最小路径和2. LeetCode 53 : 最大子序和3. LeetCode 198 : 打家劫舍4. LeetCode 213 : 打家劫舍 II5. Leetcode 931 : 下降路径最小和6. LeetCode 322 : 零钱兑换7. LeetCode 62 : 不同路径8. LeetCode 面试题 08.02 : 迷路的机器人总结前言动态规划是编程面试中的热门话题,如果面试题是求解一个问题的最优解(通常是求最大值或者最小原创 2020-11-06 19:38:28 · 1162 阅读 · 0 评论 -
二分查找相关面试算法题总结
文章目录前言算法题1. LeetCode 1423. 可获得的最大点数模版总结前言二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。二分查找需要满足两个前提条件:1)必须采用顺序存储结构。2)元素按关键字有序排列。关键需要明白查找的区间是"[]“还是”[)"; 以及查找的数据不等于目标元素时,目标元素所在的区间。算法题1. LeetCode 1423. 可获得的最大点数模版int binarySearch(vector<T>& nums,原创 2020-11-01 19:00:45 · 504 阅读 · 0 评论 -
滑动窗口相关算法题总结
文章目录前言算法题1. LeetCode 1423. 可获得的最大点数2. LeetCode 3 : 无重复字符的最长子串3. LeetCode 1004 : 最大连续1的个数 III4. LeetCode 1438 : 绝对差不超过限制的最长连续子数组5. LeetCode 76 : 最小覆盖子串总结前言滑动窗口算法可以将嵌套的循环问题,转换为单循环问题,降低时间复杂度。算法题1. LeetCode 1423. 可获得的最大点数LeetCode 1423几张卡牌 排成一行,每张卡牌都有一个对原创 2020-10-24 21:46:13 · 4506 阅读 · 0 评论 -
贪心算法相关面试算法题总结
文章目录前言算法题1. LeetCode 1403 : 非递增顺序的最小子序列2. LeetCode 455 : 分发饼干3. LeetCode 1046 : 最后一块石头的重量4. LeetCode 1578. 避免重复字母的最小删除成本5. LeetCode 435. 无重叠区间6. LeetCode 1288. 删除被覆盖区间7. LeetCode 134. 加油站8. LeetCode 763. 划分字母区间总结前言贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也原创 2020-10-18 14:22:56 · 409 阅读 · 0 评论 -
广度优先搜索相关面试算法总结(非图论方面)
文章目录前言算法题1. LeetCode 剑指 Offer 32 - III : 从上到下打印二叉树 III2. LeetCode 429 : N叉树的层序遍历3. LeetCode 103. 二叉树的锯齿形层次遍历4. LeetCode 130 : 被围绕的区域5. LeetCode 934 : 最短的桥Method 1 :DFS + BFSMethod 2:BFS + BFS6. LeetCode 994 : 腐烂的橘子7. LeetCode 542 : 01 矩阵8. LeetCode 1293 :原创 2020-09-24 23:59:42 · 2559 阅读 · 2 评论 -
深度优先搜索相关面试算法总结(非图论方面)
文章目录前言算法题1. LeetCode 130 : 被围绕的区域2. LeetCode 1219 : 黄金矿工3. LeetCode 面试题 16.19 : 水域大小4. LeetCode 529 : 扫雷游戏5. LeetCode 199 : 二叉树的右视图6. LeetCode 695 : 岛屿的最大面积7. LeetCode 200 : 岛屿数量8. LeetCode 剑指 Offer 12 : 矩阵中的路径总结前言此处总结的深度优先搜索相关面试算法题主要侧重在对二维矩阵进行一些的操作,从原创 2020-09-22 23:28:09 · 969 阅读 · 0 评论 -
最长子序列和子串相关算法题总结
文章目录最长子序列和子串相关算法题总结子串与子序列区别关键名词算法题1. LeetCode 674 : 最长连续递增序列2. LeetCode 673 : 最长递增子序列的个数3. LeetCode 300 : 最长上升子序列4. LeetCode 128 : 最长连续序列5. LeetCode 1143 : 最长公共子序列总结最长子序列和子串相关算法题总结算法题中经常碰见给定数组或者字符串求其相关的最长“连续递增”,“连续”等子序列或者子串。其主要是利用动态规划算法或者哈希表等数据结构来解决问题。子原创 2020-09-20 02:17:23 · 380 阅读 · 0 评论 -
递归和回溯相关面试算法总结
文章目录递归面试算法总结1. LeetCode 剑指 Offer 07 : 重建二叉树2. LeetCode 687 : 最长同值路径3. LeetCode 面试题 08.06 : 汉诺塔问题4. LeetCode 894 : 所有可能的满二叉树5. LeetCode 面试题 17.12 : BiNode6. LeetCode 783 : 二叉搜索树节点最小距离回溯面试算法总结1. LeetCode 79 : 单词搜索2. LeetCode 131 : 分割回文串3. LeetCode 面试题 08.08原创 2020-09-19 22:36:01 · 219 阅读 · 0 评论 -
栈队列相关面试算法总结
栈队列相关面试算法总结栈和队列虽然是特点针锋相对的两个数据结构,但他们之间亦有密切的联系,比如“用两个栈实现队列”,“用两个队列实现栈”。栈相关面试算法利用栈的特性先进后出(FILO)去解决问题,主要用以下特性:数据是线性的;问题中常常涉及到数据的来回比较;比如每日温度、括号比配、字符串解码、去掉重读字母等问题;问题中涉及到数据的转置,例如进制问题,链表倒序打印问题;1. LeetCode 20 : 有效的括号LeetCode20/* * 1 * LeetCode 20 : 有效原创 2020-09-11 22:54:54 · 162 阅读 · 0 评论 -
链表相关面试算法总结实现
链表相关算法总结实现链表应该是面试过程中被提及最频繁的数据结构了,首先链表的结构简单,链表的创建,插入节点,删除节点等操作仅需要较短的代码就能实现。加上链表是一种动态数据结构,需要对指针进行操作,因此需要面试者有较好的编程功底。下面将给出与链表相关的算法题。皆用C++语言实现, 题目多来源于LeetCode。关于链表的题目关键是如下四个思路:可以给链表加上一个头节点,对链表删除亦或其他操作都方便很多。快慢指针是灵魂,对判断是否有环,返回倒数第k个节点很有帮助。距离计算也是一大方法,如找到相交链表的原创 2020-09-06 20:06:32 · 280 阅读 · 0 评论 -
常用排序算法的C++实现汇总
常用排序算法的C++实现汇总以下为常用排序算法的C++实现。其中快速排序,总结实现了双路快排和三路快排。最后还实现了一个SortHelper.h的文件,可以随机生成无序或者近似有序的数据,检验数组是否已经排好序,以及各排序算法程序运行时间对比。插入排序template<typename T>void insertionSort(vector<T>& nums){ unsigned long n = nums.size(); for(unsigned int原创 2020-08-16 20:15:19 · 157 阅读 · 0 评论 -
二叉树相关算法总结实现
二叉树相关算法总结实现二叉树作为基本的数据结构,在一些算法面试中会经常遇到,现总结如下。基本算法思想就不介绍了,代码中关键处会有注释。程序全以C++语言实现,并跟一个main函数的简单测例。二叉树数据结构的定义struct TreeNode{ int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {}};二叉树的最大深度int原创 2020-07-12 21:12:26 · 407 阅读 · 0 评论