算法基础
墨回首
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
剑指Offer 30 *最小的k个数
题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。思路 第一反应肯定是排序呗;冒泡啊,快排啊,反正排好序就行了,下面我写了一个用Treeset的,直接全扔进去,就是有序的了;时间复杂度?那肯定就不是我控制得了; 快排,思路很简单,就是找寻哨兵呗;不过原来的数组会被改变; 未完成的大根堆法,其实应该和Treeset差不多,原创 2017-03-29 21:09:46 · 247 阅读 · 0 评论 -
剑指Offer 33 把数组排成最小的数
题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。思路 首先想到的是自然是暴力全拍列; 然后想到了变成字符,通过Collections.sort()排序,后来发现,是数组;也就是说(3,32)只能组成332或者323;这个想法是不对的 于是自然也就想到了,对每两个数变原创 2017-03-31 21:25:19 · 433 阅读 · 0 评论 -
剑指Offer 36 数组中的逆序对(归并)
题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007思路其实思路也很简单,只要你知道归并排序是怎么做到的;简单来说,归并排序分为两步,划分,和归并;难点就在归并上,简单地说,归并时已经比较的在都在一9起,然后我们取两个来比较一下呗; (5,7原创 2017-04-01 22:47:44 · 404 阅读 · 0 评论 -
剑指Offer 37 两个链表的第一个公共结点
题目描述输入两个链表,找出它们的第一个公共结点。思路 暴力法,当然是首先想到的,两层循环嘛; 链表特性,简单来说链表如果存在交点,那么后面他两一定就都一样了,也就是说交点过后的公共链是一样的 代码基于思路2,我么你就可以懂很多脑筋,首先是,链表从头遍历到尾,从后往前遍历,因为公共链是一样的,典型的后进先出,栈就来了 static public ListNode FindFirstCommonNo原创 2017-04-02 13:56:40 · 289 阅读 · 0 评论 -
剑指Offer 41 和为s的两个数字vs和为s的连续正整数列
和为s的两个数字题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。思路 暴力法不说了 头尾指针挨个扫呗,具体的想法是这样的,一个指针放在最后最大的值哪里,一个指针放在最前面最小的值哪里;如果此时小的话,你肯定不能移动尾指针吧,你就移动头指针;(1,2,3) 找到和为5 开始是这样的(1,2,3),可是这个小啊,移动原创 2017-04-05 18:21:05 · 197 阅读 · 0 评论 -
算法基础 快速排序
快排 引用维基百科的定义 步骤为: 1. 从数列中挑出一个元素,称为”基准”(pivot), 2.重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面(相同的数可以到任一边)。在这个分区结束之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。 3. 递归地(recursively)把小于基准值元素的子数列和大于基准值元素的子数列排序。原创 2017-03-27 21:40:18 · 503 阅读 · 0 评论 -
算法基础 大根堆与堆排序
大根堆与堆排序堆分为大根堆和小根堆,是完全二叉树。 完全二叉树我们知道,就是不太满的满二叉树;大根,小跟代表,父节点和子节点的关系;如果每一个父节点都不小于它的两个子节点,就可以认为是大根堆了;堆排序的思路从定义看,我们就知道了,对于大根堆来说,根节点一定是最大的,那我们就每次把根节点拿走,让大根堆重新排序,然后再取得最大值就可以了嘛;那么重要的问题就来了,大根堆是怎么从一个普通的堆转换过来的的呢原创 2017-03-30 20:20:48 · 1315 阅读 · 1 评论
分享