
数据结构与算法
小毛同学er
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
回文问题
最长回文子串https://leetcode-cn.com/problems/longest-palindromic-substring/public String longestPalindrome(String s) { if(s==null || s.length()<1) return ""; String res=""; for(int i=0; i<s.length();i++){ //以s[i]为中心的最长回文串 Stri原创 2020-10-24 20:21:36 · 293 阅读 · 0 评论 -
【数据结构与算法】双指针(二)
剑指 Offer 25. 合并两个排序的链表https://leetcode-cn.com/problems/he-bing-liang-ge-pai-xu-de-lian-biao-lcof/submissions/public ListNode mergeTwoLists(ListNode l1, ListNode l2) { //有空链表返回不空链表即可 if(l1==null || l2==null){ return l1!=null?l1:l2; }原创 2020-10-23 19:45:50 · 470 阅读 · 0 评论 -
【数据结构与算法】并查集
文章目录并查集基本框架API基本思路优化算法Leetcode 547. 朋友圈并查集https://mp.weixin.qq.com/s/gUwLfi25TYamq8AJVIopfA基本框架APIclass UF { /* 将 p 和 q 连接 */ public void union(int p, int q); /* 判断 p 和 q 是否连通 */ public boolean connected(int p, int q); /* 返回图中有多少个连原创 2020-10-22 20:37:52 · 104 阅读 · 0 评论 -
【数据结构与算法】回溯算法
https://mp.weixin.qq.com/s?__biz=MzAxODQxMDM0Mw==&mid=2247484523&idx=1&sn=8c403eeb9bcc01db1b1207fa74dadbd1&source=41#wechat_redirect// 二叉树遍历框架def traverse(root): if root is None: return # 前序遍历代码写在这 traverse(root.left) # 中序原创 2020-10-21 21:19:45 · 605 阅读 · 0 评论 -
【数据结构】链表2:双指针
单链表双指针判断链表是否有环方法一:哈希表方法二:快慢指针想象有两个指针,一个快指针:每次移动两步;一个慢指针:每次移动一步。如果没有环,快指针将停在链表的末尾。如果有环,快指针最终将与慢指针相遇。(无论快慢指针初始在哪,最后总能相遇。但初始化时要注意循环条件)使用快慢指针很容易解决这道题,但要注意避免空指针异常:java.lang.NullPointerException:如果fast=null,那么使用 fast.next 会抛出空指针异常,所以在赋值前,需要进行判断。publi原创 2020-09-05 20:15:46 · 287 阅读 · 0 评论 -
【数据结构】排序与检索
排序与检索179. 最大数题目描述给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。示例:输入: [3,30,34,5,9]输出: 9534330说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数。题解解决思想: 其实很简单,把整数换成字符,再进行自定义的排序即可。自定义排序:每一对数在排序的比较过程中,我们比较两种连接顺序哪一种更好。假设:一对整数字符a和b,有 a+b>b+a,b+c>c+b,那么一定有 a+c>b+c数组排好序后,最“重原创 2020-08-16 17:04:37 · 229 阅读 · 0 评论 -
【数据结构】排序算法:希尔排序的原理与实现
文章目录希尔排序算法原理算法实现希尔排序算法原理对于大规模乱序数组插入排序很慢,因为它只会交换相邻的元素。希尔排序为了加快速度简单地改进了插入排序,交换不相邻的元素以对数组的局部进行排序,并最终用插入排序将局部有序的数组排序。希尔排序的思想是使数组中任意间隔为 h 的元素都是有序的。这样的数组被称为 h 有序数组算法实现一种方法是对于每个 h,用插入排序将 h 个子数组独立地排序:只需要在插入排序的代码中将移动元素的距离由 1 改为 h 即可。希尔排序的实现就转化为了一个类似于插入排序,但原创 2020-08-13 20:26:04 · 460 阅读 · 0 评论 -
【数据结构】基础算法:排序——优先队列的原理与实现
优先队列优先级队列为,首部元素最大,总是删除当前最大元素。并在尾部插入元素。优先队列的两种操作:删除最大元素和插入元素。优先队列的一些重要的应用场景包括:模拟系统,其中事件的键即为发生的时间,而系统需要按照时间顺序处理所有事件;任务调度,其中键值对应的优先级决定了应该首先执行哪些任务;数值计算,键值代表计算错误,而我们需要按照键值指定的顺序来修正它们。堆排序,通过插入一列元素然后一个个地删掉其中最小的元素,我们可以用优先队列实现排序算法。初级实现4种基础数据结构:有序或无序的数组原创 2020-08-03 19:09:46 · 2879 阅读 · 0 评论 -
【数据结构】基础算法:排序——快速排序
快速排序快速排序是一种分治的排序算法。它将一个数组分成两个子数组,之后分别对这两部分记录继续进行排序,以达到整个序列有序的目的。快排的基本思想:由左子数组(有序且没有任何元素大于切分元素)、切分元素和右子数组(有序且没有任何元素小于切分元素)组成的结果数组一定是有序的快速排序可以与归并排序对比理解:1、归并排序:递归调用发生在处理整个数组之前;快速排序:递归调用发生在处理整个数组之后。2、归并排序中,一个数组被等分为两半;在快速排序中,切分(partition)的位置取决于数组的内容。性能评原创 2020-08-03 19:07:08 · 952 阅读 · 0 评论 -
二分查找——基本原理、模板以及简单练习
二分查找在查找时,我们先将被查找的键和子数组的中间键比较。 如果被查找的键小于中间键,我们就在左子数组中继续查找,如果大于我们就在右子数组中继续查找,否则中间键就是我们要找的键。一般而言,当一个题目出现以下特性时,你就应该立即联想到它可能需要使用二分查找:待查找的数组有序或者部分有序要求时间复杂度低于O(n),或者直接要求时间复杂度为O(log n)使用时需要注意查找条件,判断...原创 2020-04-28 21:59:01 · 346 阅读 · 0 评论