算法
菜鸡小王子
这个作者很懒,什么都没留下…
展开
-
最大映射 今日头条编程
最大映射 权值算法原创 2017-04-01 16:03:30 · 1288 阅读 · 0 评论 -
浅谈单调栈思想
单调栈是一种理解起来很容易,但是运用起来并不那么简单的数据结构。一句话解释单调栈,就是一个栈,里面的元素的大小按照他们所在栈内的位置,满足一定的单调性。那么到底什么时候用这个单调栈,怎么用单调栈呢。下面我们来看几个例子。先来分享一道非常简单的,我本人在google interview中遇到的题目。(大雾,当时并没有做出来。)题目是这样的,给一个数组,返回一个大小相同的数组。返回的数组的第i转载 2017-09-07 16:40:46 · 996 阅读 · 0 评论 -
布隆过滤器BloomFilter原理剖析
场景:不安全网页的黑名单包含100亿个黑名单网页,每个网页URL最多占用64B。现在设计系统根据网页URL判断该网页是否在黑名单上。要求:该系统允许万分之一以下的判断失误率,且使用的额外空间不要超过30GB。分析:如果单纯通过数据库或者哈希表来保存下来,需要640G的空间,不满足要求。遇到网页黑名单系统、垃圾邮件过滤系统、爬虫的网址判重系统、两份URL文件的重复URL等场景,又看到原创 2017-08-28 15:36:10 · 808 阅读 · 0 评论 -
排序小结
排序的稳定性:如果两条记录的关键字相等,排序后相对顺序仍然未发生改变,则为稳定排序。否之则为不稳定排序。内排序与外排序:数据全部被放置在内存中进行比较称为内排序。冒泡排序:固定i,从前往后,j>=i,从后往前,依次比较交换相邻的两个数。优化:当前面一次未发生任何交换,说明已经有序,后面无需再依次判断,设置flag,发生交换的话设置为true,外围i遍历时以flagw==true为条原创 2017-08-23 10:17:05 · 201 阅读 · 0 评论 -
两个有序数组的中位数
1、两个相等长度的有序数组求上中位数arr1=[1, 2, 3, 4],arr2= [3,4,5,6],上中位数为3时间复杂度O(logN):public int getUpMedian(int[] arr1 , int[] arr2){ int start1 =0; int end1 = arr1.length-1; int sta原创 2017-09-04 21:43:42 · 346 阅读 · 0 评论 -
Leetcode之Candy分糖果问题
题目:题目大意:几个小孩站一排,每个小孩有个等级值,现在给小孩发糖,发的时候要遵守2个规则:(1)每个小孩至少一颗糖(2)两个相邻的小孩中,等级大的小孩一定比等级小的小孩糖多,求发糖的数目的最小值。(等级相同的可以有多有少)解法1:刚刚开始所有小孩的糖果数都为1,从左往右,arr[i]>arr[i-1]则当前i的小孩糖果数加1,再从右往左,arr[i]代码:public原创 2017-08-15 14:27:14 · 636 阅读 · 0 评论 -
单链表的快排实现
分析:因为单链表只能单向前进,所以不能采用常见的快排模式。我们只需要两个指针p和q,初始分别为head和head.next,这两个指针均往next方向移动,移动的过程中保持p之前的key都小于选定的key,p和q之间的key都大于选定的key,那么当q走到末尾的时候便完成了一次支点的寻找。后面每个部分继续递归实现。代码:/** * Created by wqh on 20原创 2017-08-18 12:29:27 · 883 阅读 · 0 评论 -
N个数组的问题
一、打印N个有序数组整体最大的TopK题目:有N个长度不一的数组,所有数组有序,请从大到小打印这N个数组的整体最大的前K个数。分析:构建一个大小为N的大顶堆,初始元素为每个有序数组的最后一个元素。调整初始堆。 打印当前堆顶元素,为最大的。假设堆顶元素来自于a数组的i位置,接下来把堆顶元素的位于a数组的前一个元素a[i-1]放在堆顶,然后调整堆。重复前两步,直到打印前K个。在步骤3中,如原创 2017-07-24 11:03:10 · 972 阅读 · 0 评论 -
归并排序的算法应用
利用归并排序去解决问题原创 2017-07-30 23:41:17 · 292 阅读 · 0 评论 -
多叉树求最优解问题
多叉树求最优解问题转载 2017-07-07 20:36:48 · 1003 阅读 · 0 评论 -
Same Tree (JAVA实现)
Same Tree (JAVA实现): 给定两个二叉树,判断是否相等,当结构相同且树节点有相同值。原创 2016-10-29 09:55:52 · 289 阅读 · 0 评论 -
双核处理 网易实习编程题
双核处理-01背包问题原创 2017-03-30 09:52:31 · 574 阅读 · 0 评论 -
一组数中如果只有一个数是1个,其他数是3个,找出这个数?
思想:模拟3进制不进位加法运算,所有数相同位相加对3取余,得到的结果要么为1,要么为0,最终结果即为那个出现一次的数。代码: public int getSingle(int[] arr, int k){ int res = 0; int sum = 0; for (int i = 0; i < 32; i++) {原创 2017-09-20 10:19:39 · 653 阅读 · 0 评论