
算法+数据结构
zz0129
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
(一) 链表 - 插入删除基本操作
链表:一种用于存储数据集合的数据结构链表的属性:1. 相邻元素之间通过指针连接 2.最后一个元素的后继元素为null 3.链表的空间可以按需分配(直到系统内存耗尽) 4.没有内存空间的浪费(但是链表当中的指针需要一些额外的内存花销)链表和数组的区别:(1)数组存储在一块连续的内存空...原创 2018-05-21 22:46:01 · 1554 阅读 · 0 评论 -
(二) 链表 - 经典问题汇总
(一)找到链表的倒数第n个节点 1.这个问题不难,我们可以两次遍历链表,第一遍记录链表的长度L,第二遍从头遍历链表,找到L-n+1的位置的节点,然后输出,这样时间复杂度为o(n),空间复杂度为o(1) 2.上面的方法看起来不错,但是我们还可以有更好的方法,我们仅仅使用一次遍历就可以,我们使用两个指针slowNode和fastNode来一起遍历,两个指针都指向链表头结点,仅当fastNo...原创 2018-05-22 09:55:34 · 273 阅读 · 0 评论 -
(三) 链表 - 链表进阶问题汇总
(一)如何将两个有序链表,合并成一个新的有序链表 可以用递归解决,时间复杂度为O(n),原理不太好讲,上代码吧public ListNode MergeList(ListNode a, ListNode b){ ListNode result = null; if(a == null) return b; if(b == null) return a; if(a.ge...原创 2018-05-22 22:59:00 · 237 阅读 · 0 评论 -
双向队列解决滑动窗口最大值问题
这个问题让我死在了双向队列的使用和算法逻辑上面,所以记录一下,以备后面查看所需。题目描述: 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5};针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2...原创 2018-06-26 20:02:13 · 457 阅读 · 0 评论 -
字符串的排列(java)
题目描述: 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 输入描述: 输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。 又是一个被细节坑死的题目,好不容易解决了排列问题,然后发现顺序不一样。。。嗯,一定要记下来,以解我心头之恨 imp...原创 2018-07-30 17:43:06 · 202 阅读 · 0 评论 -
最小的k个数 (java)
题目描述: 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。 解题思路: 使用优先队列保证队列里存放的是最小的K位数 第一次在解题过程中使用到优先队列,做一下记录 import java.util.ArrayList; import java.util.Comparator; import java.util.P...原创 2018-07-30 21:51:36 · 620 阅读 · 0 评论 -
把数组排成最小的数(java)
题目描述: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。 解题思路: 一开始自己没想到,便去看了别人的题解,没想到可以巧妙的使用比较器进行实现。 本题当中还有一点小的收获,就是之前知道在遍历集合的时候除了使用迭代器现在也可以使用另一种方法,只不过一直没有用过,...原创 2018-07-31 12:43:10 · 887 阅读 · 0 评论 -
丑数(java)
题目描述: 把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。 解题思路: 由丑数的定义可知,一个丑数一定是由比它更小的丑数*2、*3或者*5得来的,这样我们就可以利用这个规律获得所有的丑数,并把其存放在数组里,这里由于不知道数组的大小,所以需要用ArrayLi...原创 2018-07-31 14:36:10 · 334 阅读 · 0 评论 -
数组中的逆序对 (java)
题目描述: 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007 解题思路: 一开始一头雾水,后面想到了使用归并排序的思想,其实有多少个逆序对,就是归并排序的时候,后面的数要超越前面多少个,,,嗯,好像不是很好说,要不然直接看代码吧。还要注意,...原创 2018-07-31 22:21:15 · 599 阅读 · 0 评论