数据结构与算法
文章平均质量分 91
数据结构与算法
can_chen
自知无知,永远求知!
展开
-
leetcode之哈希法与双指针法求多数之和
目录1. leetcode 1. 两数之和2. leetcode 15. 三数之和3. leetcode 18. 四数之和4. leetcode 454. 四数相加 II1. leetcode 1. 两数之和leetcode 1. 两数之和(难度:简单)题目要求:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。你可以按任意顺序返回答案。示例原创 2021-02-23 22:15:07 · 302 阅读 · 0 评论 -
leetcode之回溯算法
目录一 组合问题1. leetcode 77.组合2. leetcode 39.组合总和3. leetcode 40.组合总和II4. leetcode 216.组合总和III5. leetcode 377.组合总和IV6. leetcode 17.电话号码的字母组合二 排列问题1. leetcode 46.全排列2. leetcode 47.全排列II一 组合问题1. leetcode 77.组合leetcode 77.组合题目描述:给定两个整数 n 和 k,返回 1 … n 中所有可能的 k原创 2021-02-01 20:18:50 · 839 阅读 · 0 评论 -
leetcode之链表专题
一 虚拟头结点对于链表题目,我们需要区分head节点是第一个有效节点还是一个虚拟头节点(即不存放任何值,仅仅用来指向第一个有效节点),对于leetcode中关于链表的题目,head头结点指的就是第一个有效节点,并不是虚拟头节点;通常在解题中,为了方便链表的一些操作,我们会给链表设置一个虚拟头结点leetcode 203.移除链表元素题目要求:删除链表中等于给定值 val 的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出原创 2021-01-17 01:37:42 · 675 阅读 · 7 评论 -
单调栈的应用——每日温度
何为单调栈?单调栈有什么用?什么情况下可以使用单调栈?为什么要使用单调栈?相信第一次接触到单调栈的你都会有这些疑问;栈是操作受限的线性表,对于插入和删除都只能在一端进行,而单调栈就是在栈的基础上进一步限制了,有单调递增栈和单调递减栈,对于单调递增栈来说,就是需要保证栈中的元素大小是单调递增的,同理,对于单调递减栈来说,需要保证栈中的元素大小是单调递减的例如:对于(3,2,1)来说,满足单调递增栈,对于(1,2,3)来说,满足单调递减栈,而(3,1,2)既不满足单调递增栈也不满足单调递减栈举一个例子,有一原创 2020-12-25 00:55:04 · 318 阅读 · 0 评论 -
单调栈的应用——接雨水
题目描述LeetCode 42. 接雨水(难度:困难)给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。解题思路:首先,拿到这道题目的时候,我们应该先想,什么情况下才能接到雨水?如果凭空想象会很难,但是结合题目给出的图解就非常清晰了,如果后面的柱子高度比前面的柱子高度小,那么是接不到雨水的,而如果后面的柱子高度是大于前面柱子高度的,那么是有可能接到雨水的(注意只是有可能,后面我们就可以看出接不到雨水的情形),想到这一步,就可以把这道题转换一下.原创 2020-12-24 20:46:44 · 688 阅读 · 0 评论 -
一看就会,一写就废——二分法
二分法相对于其它算法来说是比较简单的,很容易理解,但是如果要完整的写出二分法的代码,还是有点挑战性的,可能会出现各种各样的问题,包括死循环、边界定义不清晰等,另外就是,可能传统的二分法我们都能理解,但是换了一下题目就不会用二分法的思想去解答了,以下附上个人比较喜欢的二分法模板:public class 二分查找 { /** * 递归法 */ public int search(int[] arr, int target, int left, int right) {原创 2020-12-22 19:32:46 · 454 阅读 · 4 评论 -
TOP K问题及使用优先队列实现堆
TOP K是一个非常经典的算法问题,灵活运用了排序算法,也是一个高频面试点,不仅要掌握TOP K思想,还应该学会使用该思想解决实际问题,剑指Offer中的“最小的k个数”就是TOP K问题的实际运用Top K问题是指在N个数的无序序列中找出最大的K个数或者最小的K个数,而其中的N往往都特别大,对于这种问题,最容易想到的办法当然就是先对其进行排序,然后直接取出最大或最小的K个元素就行了,但是这种方法往往是不可靠的,不仅时间效率低而且空间开销大,排序是对所有数都要进行排序,而实际上,这类问题只关心最大或者最小原创 2020-12-20 23:52:01 · 684 阅读 · 0 评论 -
八大排序算法
以下总结了常见的八大排序算法,对于编码比较复杂的堆排序、归并排序和基数排序,则只给出了排序的思想,没有附上代码八大排序算法的时间复杂度和空间复杂度:八大排序算法的稳定性总结:①稳定:冒泡排序、插入排序、归并排序、基数排序②不稳定:选择排序、快速排序、希尔排序、堆排序常见的算法时间复杂度由小到大依次为:Ο(1)<Ο(log2n)<Ο(n)<Ο(nlog2n)<Ο(n2)<Ο(n3)<Ο(2^n) <Ο(n!)一 冒泡排序public void bubbleSort(int[] a){ //原创 2020-12-20 17:31:55 · 1065 阅读 · 0 评论 -
面试高频-哈希表
哈希表是非常重要的一种数据结构,例如HashMap集合底层也是基于哈希表来实现的;关于哈希表的知识点也是经常在面试中被问到,通过这几天对于哈希表的学习,包括看了哈希表的源码,以及手动编写了一个简单的哈希表,加深了对哈希表的理解,并在此进行总结!1. 什么是哈希表Hash表也称散列表,也有直接译作哈希表,Hash表是一种根据关键字值(key - value)而直接进行访问的数据结构。它基于数组,...原创 2020-04-11 22:06:34 · 1625 阅读 · 0 评论 -
图解KMP算法
KMP算法是最常见的算法之一,通常用来解决字符串的匹配问题,KMP算法本人认为是比较难理解的,我对于这个算法的学习是通过边画图边理清思路,然后在理解的基础上再进行代码的编写,我认为这个方法对于我来说能够更好的掌握这个算法,因此通过这篇博客进行分享,希望能对大家有所帮助!KMP算法的介绍KMP算法是一个解决模式串在文本串是否出现过,如果出现过,求出最早出现的位置的经典算法;KMP算法是在暴力匹配...原创 2020-04-21 18:30:54 · 1091 阅读 · 0 评论 -
动态规划算法典型例题
1. 动态规划之选数问题题目要求:假设给定一串数字{1, 2, 4, 1, 7, 8, 3},我们要从中选择若干个数,使最后的和达到最大。选择的规则是,不能选相邻的数字。比如:如果我们选了第一个数字1,那么我们就不能选2,如果我们选择了数字4,那么我们就不能选择与它相邻的2和1。动态规划的思想:将整个问题划分成一个个子问题,也就是说要求整个数列的最大和,可以先求出前面若干个数的和,一直划分...原创 2020-05-02 12:08:07 · 15578 阅读 · 3 评论 -
程序猿必备——动态规划算法
什么是动态规划算法?动态规划算法(Dynamic Programming),也叫dp算法,该算法的核心思想是:将大问题划分为小问题进行解决,从而一步步获取最优解;动态规划算法与分治算法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。dp与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。 ( 即下一个子...原创 2020-05-02 11:55:27 · 1583 阅读 · 0 评论