
算法(第4版)
文章平均质量分 55
li563868273
个人主页:lizhao.pw
展开
-
双栈算术表达式求值算法
import java.util.Scanner;/** * (1+((2+3)*(4*5)))测试 * Created by lizhaoz on 2016/1/8. */public class DijkstraEvalute { public static void main(String[] args) { Stack ops=new Stack();原创 2016-01-08 14:45:14 · 1536 阅读 · 0 评论 -
各种排序的比较和使用场景分析
冒泡排序 冒泡排序重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说排序完成。规模比较小的时候应用冒泡排序,主要应用于教学。。。选择排序--只会移动N次 选择排序的主要思想:首先找到数组中最小的那个元素,其次,将它和第一个元素交换。接下来找第二小和第二个交换。运原创 2016-04-20 15:48:57 · 14514 阅读 · 5 评论 -
小米笔试-懂二进制
题目:世界上有10种人,一种懂二进制,一种不懂。那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么? 输入:1999 2299 输出:7思路判断有多少位不同,我们可以使用异或,把两个数异或之后得到的数,不相同的位就是1。接下来我们只需要统计异或之后的数字有多少位具体代码实现:public int countBitDiff(int m, int n) { i原创 2016-04-05 21:57:42 · 889 阅读 · 0 评论 -
滑动窗口联系
有一个整型数组 arr 和一个大小为 w 的窗口从数组的最左边滑到最右边,窗口每次向右边滑一个位置。 返回一个长度为n-w+1的数组res,res[i]表示每一种窗口状态下的最大值。 以数组为[4,3,5,4,3,3,6,7],w=3为例。因为第一个窗口[4,3,5]的最大值为5,第二个窗口[3,5,4]的最大值为5,第三个窗口[5,4,3]的最大值为5。第四个窗口[4,3,3]的最大值为4。第五原创 2016-02-04 15:12:51 · 562 阅读 · 0 评论 -
相邻两数最大差值
有一个整形数组A,请设计一个复杂度为O(n)的算法,算出排序后相邻两数的最大差值。给定一个int数组A和A的大小n,请返回最大的差值。保证数组元素多于1个。测试样例:[1,2,5,4,6],5返回:2基于桶排序的思想完成,不考虑两个相同的桶内的差值,只考虑该桶的最小值减去上一个桶的最大值,最大的就是最大值。public class Gap { //重点在O(n)上面原创 2016-01-11 10:52:30 · 1584 阅读 · 0 评论 -
最短排序子数组
对于一个数组,请设计一个高效算法计算需要排序的最短子数组的长度。给定一个int数组A和数组的大小n,请返回一个二元组,代表所求序列的长度。(原序列位置从0开始标号,若原序列有序,返回0)。保证A中元素均为正整数。测试样例:[1,4,6,5,9,10],6返回:2public class Subsequence { public static int shortestSu原创 2016-01-11 10:45:15 · 629 阅读 · 0 评论 -
小范围排序
已知一个几乎有序的数组,几乎有序是指,如果把数组排好顺序的话,每个元素移动的距离可以不超过k,并且k相对于数组来说比较小。请选择一个合适的排序算法针对这个数据进行排序。给定一个int数组A,同时给定A的大小n和题意中的k,请返回排序后的数组。测试样例:[2,1,4,3,6,5,8,7,10,9],10,2返回:[1,2,3,4,5,6,7,8,9,10]具体解法:使用堆排序原创 2016-01-11 10:43:14 · 281 阅读 · 0 评论 -
荷兰国旗-三色查找
有一个只由0,1,2三种元素构成的整数数组,请使用交换、原地排序而不是使用计数进行排序。给定一个只含0,1,2的整数数组A及它的大小,请返回排序后的数组。保证数组大小小于等于500。测试样例:[0,1,1,0,2,2],6返回:[0,0,1,1,2,2]具体解法和三分切向快速排序很像public class ThreeColor { public static in原创 2016-01-11 10:40:50 · 362 阅读 · 0 评论 -
有序矩阵查找
现在有一个行和列都排好序的矩阵,请设计一个高效算法,快速查找矩阵中是否含有值x。 给定一个int矩阵mat,同时给定矩阵大小nxm及待查找的数x,请返回一个bool值,代表矩阵中是否存在x。所有矩阵中数字及x均为int范围内整数。保证n和m均小于等于1000。 测试样例: [[1,2,3],[4,5,6],[7,8,9]],3,3,10public class Finder原创 2016-01-11 10:35:45 · 809 阅读 · 0 评论 -
三分切向快速排序
public class QuickSort3way { public static void sort(Comparable[] a){ sort(a,0,a.length-1); } private static void sort(Comparable[] a, int lo, int hi) { if (hi<=lo) return原创 2016-01-11 10:26:16 · 739 阅读 · 0 评论 -
动态规划-数组中求最长等差数列的长度
题目:给定一个数组求出数组最长等差数列的长度。 举例:3,8,4,5,6,2 输出:5。 思路:利用区间dp来做,dp[i][diff]的意思是 intAr[0]到intAr[i],等差为diff的等差长度。在求dp长度的时候利用一个ans变量保存最大即可。 dp的求法: 有diff=intAr[i]-intAr[j](j<i) dp[i][diff]=dp[j][diff]。 细节处原创 2016-04-24 19:28:33 · 4606 阅读 · 0 评论