
算法
文章平均质量分 63
USTCZYY
这个作者很懒,什么都没留下…
展开
-
java实现逆序数对
依据分治法,如果我们将数组分解成两个子序列,分别求出两个子序列的逆序数,再求出两个子序列之间元素的逆序数,就可以得出整个数组的逆序数了。可以做以下考虑: 分解:将问题分成前后两个规模为n/2的数组 解决:分别求解各自的逆序对数。如果子问题规模为2或1,可直接求解。 合并:此时虽然知道两个子序列各自的逆序对数,但两个子序列原创 2014-04-14 22:39:25 · 4157 阅读 · 1 评论 -
从一列数中筛除尽可能少的数使得从左往右看,这些数是从小到大再从大到小的
问题描述: 从一列数中筛除尽可能少的数使得从左往右看,这些数是从小到大再从大到小的。解题思路: 假设一个数组arr[n],它的分段点是i(0-i递增,i到n-1递减),假设我们用方法LIS(i)(最长递增子序列)找到从0到i的递增子序列,LDS找到从i到n-1的最长递减子序列,那么它的总长度为LIS(i) + LDS(i) - 1,所以我们扫描整个数组,即让i从0到n-原创 2014-04-10 23:10:41 · 1640 阅读 · 0 评论 -
快速指数相乘法
对于a的n次幂求解这个问题,不少人看到后都觉得没有什么内容吧!我第一次想到这个问题也觉得没有什么内容,但是后来仔细想想,里面还真是有学问哦!想想看如果我们求 a8,有以下两种方法:1)a8 = a * a * a * a * a * a * a * a 需要计算 7次乘法2)a 8 = (a * a) * A * A (其中A = a * a) 需要计算3次乘法对于这么原创 2014-04-10 17:16:07 · 2707 阅读 · 0 评论 -
笔试面试常见智力题
【试题描述】你让工人为你工作7天,给工人的回报是一根金条。金条平分成相连的7段,你必须在每天结束时给他们一段金条,如果只许你两次把金条弄断,你如何给你的工人付费?分为1、2、4 三段。Day1:给1Day2:给2,还1Day3:给1Day4:给4,还1、2Day5:给1,还2Day6:给2,还1Day7:给1【试题描述转载 2014-03-27 11:17:59 · 788 阅读 · 0 评论 -
一些企业的面试题(笔试),数学&逻辑
Microsoft:微软笔试题:利用天平砝码,三次将140克的盐 分成50、90克两份?有一个天平,2克和7克砝码各一个。如何利用天平砝码在三次内将140克盐分成50,90克两份。第一种方法:第一次:先称 7+2克盐 (相当于有三个法码2,7,9)第二次:称2+7+9=18克盐 (相当于有2,7,9,18四个法码)第三次:称7+18=x+2,得出x是23,23+9+18=5转载 2014-04-16 15:50:05 · 10917 阅读 · 0 评论 -
找工作笔试面试那些事儿(15)---互联网公司面试的零零种种和多家经验
前面从宏观的角度,根据师兄师姐口口相传的经验和自己的面试经历,写了点面试应该注意的点。这里针对,互联网公司,总结总结面试注意的点,里面的一部分内容出自一些优秀的大牛口中或笔下,一部分是自己的客观感受,也许会有挺多地方说的不对,望大家指出,谢谢。1 互联网面试100分理论篇 之前看到过一个所谓的互联网面试100分理论:50分的算法和C语言、15分的项目分、15分的知识面和扯淡分、1转载 2014-03-21 22:38:09 · 927 阅读 · 0 评论 -
小白鼠试毒瓶问题
大家应该都听说过这个老题目:有 1000 个一模一样的瓶子,其中有 999 瓶是普通的水,有一瓶是毒药。任何喝下毒药的生物都会在一星期之后死亡。现在,你只有 10 只小白鼠和一星期的时间,如何检验出哪个瓶子里有毒药?这个问题的答案也堪称经典:把瓶子从 0 到 999 依次编号,然后全部转换为 10 位二进制数。让第一只老鼠喝掉1到1000所有二进制数右起第一位是 1 的瓶子,让第二只老鼠喝掉所原创 2014-04-01 18:50:59 · 3063 阅读 · 1 评论 -
SCAU OJ 9715 相邻最大矩形面积
描述: 在X轴上水平放置着 N 个条形图,这 N 个条形图就组成了一个柱状图,每个条形图都是一个矩形,每个矩形都有相同的宽度,均为1单位长度,但是它们的高度并不相同。例如下图,图1包含的矩形的高分别为2,1,4,5,1,3,3 单位长度,矩形的宽为1单位长度。9715 相邻最大矩形面积你的任务就是计算柱状图中以X轴为底边的最大矩形的面积。图2阴影部分就是上述例子的最大矩形面翻译 2014-03-31 18:40:31 · 2683 阅读 · 0 评论 -
代码面试最常用的10大算法
面试也是一门学问,在面试之前做好充分的准备则是成功的必须条件,而程序员在代码面试时,常会遇到编写算法的相关问题,比如排序、二叉树遍历等等。在程序员的职业生涯中,算法亦算是一门基础课程,尤其是在面试的时候,很多公司都会让程序员编写一些算法实例,例如快速排序、二叉树查找等等。本文总结了程序员在代码面试中最常遇到的10大算法类型,想要真正了解这些算法的原理,还需程序员们花些功夫。1.转载 2014-04-15 14:26:36 · 711 阅读 · 0 评论 -
catalan数(卡特兰数)
一,问题:n个拿着1元,n个人拿着2元去买票。票价一元,且售票元只能用n个人购票的一元给2元的找零。问有几种排列方法 分析:卡特兰数方法 递推公式:F(2*n) =F(0)*F(2(n-1)) +F(1)*F(2(n-2))+……+F(2(n-1))*F(0)原创 2014-04-13 15:42:04 · 710 阅读 · 0 评论 -
java 之 二分查找实现
public class BinarySearch{ public static final int NOT_FOUND = -1; /** *ustczyy *zyyjiao@mail.ustc.edu.cn */ public static > int binarySearch(原创 2014-02-17 17:16:36 · 819 阅读 · 0 评论 -
布隆过滤器
在日常生活中,包括在设计计算机软件时,我们经常要判断一个元素是否在一个集合中。比如在字处理软件中,需要检查一个英语单词是否拼写正确(也就是要判断它是否在已知的字典中);在 FBI,一个嫌疑人的名字是否已经在嫌疑名单上;在网络爬虫里,一个网址是否被访问过等等。最直接的方法就是将集合中全部的元素存在计算机中,遇到一个新元素时,将它和集合中的元素直接比较即可。一般来讲,计算机中的集合是用哈希表(hash转载 2013-12-23 23:28:03 · 945 阅读 · 0 评论 -
Time33哈希算法
字符串哈希函数,发现几乎所有的流行的HashMap都采用了DJB Hash Function,俗称“Times33”算法。Times33的算法很简单,就是不断的乘33,见下面算法原型。hash(i) = hash(i-1) * 33 + str[i]原创 2013-12-19 22:55:01 · 1364 阅读 · 0 评论 -
常用算法复杂度比较
下面是不同排序算法的时间复杂度,你可以去wiki看一下这些算法的基本思想。AlgorithmAverage TimeWorst TimeSpace冒泡排序n^2n^21选择排序n^2n^21Counting Sortn+kn+kn+kInsertion sortn^2n^2原创 2013-11-29 11:35:12 · 981 阅读 · 0 评论 -
编程面试的10大算法概念汇总
以下是在编程面试中排名前10的算法相关的概念,我会通过一些简单的例子来阐述这些概念。由于完全掌握这些概念需要更多的努力,因此这份列表只是作为一个介绍。本文将从Java的角度看问题,包含下面的这些概念:1. 字符串2. 链表3. 树4. 图5. 排序6. 递归 vs. 迭代7. 动态规划8. 位操作9. 概率问题10. 排列组合1. 字符串如果IDE没原创 2013-11-29 11:04:11 · 652 阅读 · 0 评论 -
基于快排的partition实现TOPK问题
LDA算法入门一. LDA算法概述:线性判别式分析(Linear Discriminant Analysis, LDA),也叫做Fisher线性判别(Fisher Linear Discriminant ,FLD),是模式识别的经典算法,它是在1996年由Belhumeur引入模式识别和人工智能领域的。性鉴别分析的基本思想是将高维的模式样本投影到最佳鉴别矢量空间,以达到抽取分类信息和压缩特转载 2013-11-09 16:13:45 · 3928 阅读 · 0 评论 -
百度面试题:POJ 2192
百度二面的时候有一道题目没有答上来,回来一查,原来是POJ上的原题,是一个DP问题,当时有向这方面想,但始终没有找出重叠子问题,网上看到别人定义的子问题,感觉真心简单,关键看是否能找出子问题了,这个积累不是一时半日的,自己还是太菜。刚刚到POJ上AC了这道题,附题目链接:POJ 2192: http://poj.org/problem?id=2192题意:就是给定三个字符串A,B,C;转载 2014-04-11 17:05:28 · 663 阅读 · 0 评论 -
java实现如何在字符串中找到第一个不重复的字符
/** * @author zhang yin ye * @date 2014 6 20 * @topic 如何在字符串中找到第一个不重复的字符 * 三种方法实现 */package ustc.zyy.ArrayList;import java.util.ArrayList;import java.util.HashMap;import java.ut原创 2014-06-20 22:16:56 · 4831 阅读 · 0 评论 -
java 之连续子序列最大和问题的四个解法
import java.util.Random;public final class MaxSumTest{ static private int seqStart = 0; static private int seqEnd = -1; /** *ustczyy *zyyjiao@mail.ustc.edu.cn */原创 2014-02-17 17:19:59 · 1998 阅读 · 0 评论 -
java排列组合算法
全排列算法翻译 2014-04-29 19:07:00 · 979 阅读 · 0 评论 -
常见算法题(包括华为机试题)
一、维护O(1)时间查找最大元素的栈问题描述:一个栈stack,具有push和pop操作,其时间复杂度皆为O(1)。设计算法max操作,求栈中的最大值,该操作的时间复杂度也要求为O(1)。可以修改栈的存储方式,push,pop的操作,但是要保证O(1)的时间复杂度,空间时间复杂度无要求。可以创建一个类,类里有两个栈,一个栈S维持正常的push、pop转载 2014-04-01 14:54:07 · 2925 阅读 · 0 评论 -
在Excel2003中,用A表示第1列,B表示第2列。。。Z表示第26列,AA表示第27列,AB表示第28列。。。以此类推。请写出一个函数,输入用字母表示的列号编码,输出它是第几列
这道题其实就是26进制字符串转十进制的题,由于A到Z在ASCii中是连续的原创 2014-04-21 16:50:36 · 8364 阅读 · 0 评论 -
怎么判断一个数是不是2的N次方
题目:给定一个整数num,判断这个整数是否是2的N次方。比如,2,4,8是2的那次方,6,10不是2的N次方。请看下面的程序: 01public static bool Check1(intnum)02{03 inti = 1;原创 2014-04-02 11:23:30 · 1286 阅读 · 0 评论 -
java实现将数组的大小写字母分开
可以利用快排的一次排序思想 要时刻记得快排的思想原创 2014-07-04 16:44:15 · 3486 阅读 · 0 评论 -
java谢尔排序
选择排序的优化 package contcurrentandalgorithm;/** * * @author Administrator * zyyjiao@mail.ustc.edu.cn */public class ShellSort { public static void main(String[] args) { int a原创 2013-11-23 11:39:46 · 840 阅读 · 0 评论 -
java实现 Set matrix zeros
Set matrix zerosGiven a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.如果矩阵中某一元素为零,则将其所在列与行置为零原创 2014-07-04 10:51:22 · 1397 阅读 · 0 评论 -
java实现Merge Intervals
Given a collection of intervals, merge all overlapping intervals.For example,Given [1,3],[2,6],[8,10],[15,18],return [1,6],[8,10],[15,18].原创 2014-07-02 20:04:45 · 2090 阅读 · 0 评论 -
java杨氏矩阵查找算法
在一个m行n列二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。定位法,时间复杂度O(m+n)。首先直接定位到最右上角的元素,再配以二分查找,比要找的数(6)大就往左走,比要找数(6)的小就往下走,直到找到要找的数字(6)为止,如下图所示 代码如下pac原创 2013-11-23 20:13:25 · 1123 阅读 · 0 评论 -
java实现最长匹配括号的长度
下面是leetcode的Longest Valid Parentheses的一个解法 时间复杂度为O(n)原创 2014-06-30 10:36:55 · 2773 阅读 · 0 评论 -
java实现求最大回文长度
以每个位置为中心,向两端扩展,计算以每个位置为中心的最大的palindrome。时间O(n^2),空间O(1); public class Solution { public static String longestPalindrome(String s) { if (s.length() String result = "";原创 2014-04-15 22:51:46 · 2112 阅读 · 0 评论 -
最短摘要生成
Alibaba笔试题:给定一段产品的英文描述,包含M个英文字母,每个英文单词以空格分隔,无其他标点符号;再给定N个英文单词关键字,请说明思路并编程实现方法String extractSummary(String description,String[] key words),目标是找出此产品描述中包含N个关键字(每个关键词至少出现一次)的长度最短的子串,作为产品简介输出。(不限编程语言)20分。原创 2014-04-12 16:57:42 · 1190 阅读 · 0 评论 -
动态规划算法基本原理
动态规划一般也只能应用于有最优子结构的问题。最优子结构的意思是局部最优解能决定全局最优解(对有些问题这个要求并不能完全满足,故有时需要引入一定的近似)。简单地说,问题能够分解成子问题来解决。动态规划算法分以下4个步骤:1.描述最优解的结构2.递归定义最优解的值3.按自底向上的方式计算最优解的值 //此3步构成动态规划解的基础。4.由计算出的结果构造一个最优解。原创 2013-11-28 23:09:47 · 5507 阅读 · 0 评论 -
处理海量数据常用算法
分而治之/hash映射 + hash统计 + 堆/快速/归并排序;双层桶划分Bloom filter/Bitmap;Trie树/数据库/倒排索引;外排序;分布式处理之Hadoop/Mapreduce原创 2013-11-28 09:56:41 · 874 阅读 · 0 评论 -
常见hash算法的原理
散列表,它是基于快速存取的角度设计的,也是一种典型的“空间换时间”的做法。顾名思义,该数据结构可以理解为一个线性表,但是其中的元素不是紧密排列的,而是可能存在空隙。散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。翻译 2013-10-23 10:24:58 · 1189 阅读 · 0 评论 -
蛇形矩阵的java实现
题目:计算并输出 nXn 的蛇形矩阵。(n>0)例如 4X4 的蛇形矩阵如下:1 3 4 102 5 9 116 8 12 157 13 14 16类似于前面的输出螺旋矩阵的方法,每一次在数组中填写新的数字都有一个方向,与输出螺旋数组不同的是不是简单的上下左右四个方向,这里涉及到右,下,右上,左下四个方向,针对每步操作都需要想好对应转载 2013-10-19 23:35:41 · 3096 阅读 · 0 评论 -
MD5加密------java类
package cn.ipanel.apps.portalBackOffice.util.md5;import java.security.MessageDigest;import org.apache.log4j.Logger;/** * MD5 的加密 * * @author zhang434 * @datetime 2013-8-17 下午05:11:29原创 2013-08-27 11:37:03 · 1415 阅读 · 0 评论 -
Java程序员必知道的八大排序算法(一 )
Java排序算法总结(一):插入排序插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据。比较和交换的时间复杂度为O(n^2),算法自适应,对于数据已基本有序的情况,时间复杂度为O(n),算法稳定,开销很低。算法适合于数据已基本有序或者数据量小的情况。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外,而第原创 2013-10-13 16:43:46 · 881 阅读 · 0 评论 -
java程序员必知道的八大排序(二)
Java排序算法总结(二):选择排序选择排序的基本操作就是每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。算法不稳定,O(1)的额外的空间,比较的时间复杂度为O(n^2),交换的时间复杂度为O(n),并不是自适应的。在大多数情况下都不推荐使用。只有在希望减少交换次数的情况下可以用。基本思想n个记录的文件的直接选择排序可原创 2013-10-13 16:45:00 · 710 阅读 · 0 评论 -
java程序员必知道的八大排序之(三)
Java排序算法总结(三):冒泡排序冒泡排序是计算机的一种排序方法,它的时间复杂度为O(n^2),虽然不及堆排序、快速排序的O(nlogn,底数为2),但是有两个优点:1.“编程复杂度”很低,很容易写出代码;2.具有稳定性,这里的稳定性是指原序列中相同元素的相对顺序仍然保持到排序后的序列,而堆排序、快速排序均不具有稳定性。不过,一路、二路归并排序、不平衡二叉树排序的速度均比冒泡排序原创 2013-10-13 16:46:26 · 837 阅读 · 0 评论 -
Java排序算法总结(四):希尔排序
希尔排序(缩小增量法) 属于插入类排序,是将整个无序列分割成若干小的子序列分别进行插入排序。希尔排序并不稳定,O(1)的额外空间,时间复杂度为O(N*(logN)^2)。最坏的情况下的执行效率和在平均情况下的执行效率相比相差不多。基本思想:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二原创 2013-10-13 16:48:47 · 688 阅读 · 0 评论