算法
安静的蛐蛐
学无止境
展开
-
冒泡排序(java)
思路:冒泡排序就是从第一个元素开始,依次比较相邻元素的大小,如果左边元素大于右边元素,就交换元素位置,直到一轮比较结束,最大的元素位于最右边。再进行上述操作,找出第二大的元素,直到所有数据有序。原创 2016-11-21 10:02:58 · 294 阅读 · 0 评论 -
排序算法之归并排序
归并排序与快速排序一样,适合大规模数据的排序。归并排序的原理对于待排序的数据,我们把数组从中间分成前后两部分,然后对前后两部分分别排序,再将排序好的两部分合并在一起,这样整个数组就有序了。示例图如下归并排序的递推公式。如下递推公式:merge_sort(p...r) = merge ( merge_sort(p...q) , merge_sort(q+1...r) )注意:这...原创 2019-03-19 08:59:47 · 514 阅读 · 0 评论 -
LeetCode之3. 无重复字符的最长子串
题目:给定一个字符串,找出不含有重复字符的最长子串的长度。示例: 给定 “abcabcbb” ,没有重复字符的最长子串是 “abc” ,那么长度就是3。 给定 “bbbbb” ,最长的子串就是 “b” ,长度是1。 给定 “pwwkew” ,最长子串是 “wke” ,长度是3。请注意答案必须是一个子串,”pwke” 是 子序列 而不是子串。思路:用一个数组记录字符串...原创 2018-05-24 22:56:40 · 736 阅读 · 0 评论 -
leetcode之合并两个有序链表
题目:将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4思路:从两链表第一个结点开始比较结点的值,取较小者作为合并链表的元素,依次进行;后面如果有一个链表为空,则直接把不为空的链表接到合并链表...原创 2018-05-22 00:11:34 · 4945 阅读 · 2 评论 -
leetcode之删除链表的倒数第N个节点
题目:给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。进阶:使用一趟扫描实现/** * Definition for singly-li原创 2018-05-21 22:08:44 · 195 阅读 · 0 评论 -
leetcode2.两数相加
题目: 给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。 示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807思路:1.在处理链表的时候, ListNode temp = sum; 中的tem...原创 2018-05-20 23:53:49 · 193 阅读 · 0 评论 -
Sha1算法原理研究
简单回顾:任意长度的明文,转化为二进制表示,对512位求模(取余)得到448位,(如果不够,进行补位,补位时,第一个补1,剩下的补0),然后用后面的64位对明文原来的二进制长度进行表示,最终得到512的倍数。然后按512位对明文进行分组L(i),再把L(i)分成16组M(i),每组32位。然后把这16组进行扩展,扩展到80组。然后会有初始的5个A,B,C,D,E链接变量,和K1,K2,K3,K4,转载 2018-01-30 00:05:07 · 1503 阅读 · 0 评论 -
插入排序
插入排序 思路:把右侧无序的数据项逐个插入到左侧有序的部分。原创 2016-11-21 11:01:42 · 300 阅读 · 0 评论 -
选择排序(java)
思路:从所有元素中,找到最小的元素与第一个元素交换位置,再从剩下的元素中找到最小的元素与第二个元素交换位置,依次类推,直到所有数据有序原创 2016-11-21 10:29:05 · 252 阅读 · 0 评论 -
排序算法之快速排序
快速排序,简称快排。也利用了分治思想。快速排序是这样的:如果要排序数组中下标从p到r之间的一组数据,我们选择p到r之间的任意一个数据作为pivot(分区点)。我们遍历p到r之间的数据,将小于pivot的放到左边,将大于pivot的放到右边,将pivot放到中间。根据分治、递归的处理思想,我们可以用递归排序下标从p到q-1之间的数据和下标从q+1到r之间的数据,直到区间缩小为1,就说明所有数...原创 2019-03-19 09:34:07 · 331 阅读 · 0 评论