`
文章列表
public class ReverseWords { /** * 题目:颠倒一个句子中的词的顺序。比如: I am a student颠倒后变成:student a am I.词以空格分隔。 * 要求: * 1.实现速度最快,移动最少 * 2.不能使用String的方法如split,indexOf等等。 * 解答:两次翻转。 */ public static void main(String[] args) { String str=" ^busy living, or busy dying! $ "; ...
import java.util.LinkedList; public class CreateBSTfromSortedArray { /** * 题目:给定一个排序数组,如何构造一个二叉排序树 * 递归 */ public static void main(String[] args) { int[] data = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; CreateBSTfromSortedArray bst = new CreateBSTfromSortedArray(); Node root = bst ...
网上找了一下这道题的解答,但都是提供思路,没有提供具体实现。其中使用大小堆这个思路看似简单,但实现起来要考虑很多。 以下分别用排序数组和大小堆来实现。 使用大小堆: import java.util.Arrays; public class MedianInHeap { /** * 题目:设计方便提取中数的数据结构 * 设计一个数据结构,其中包含两个函数,1.插入一个数字,2.获得中数。并估计时间复杂度。 * 1. 使用排序数组存储。 * 插入数字时,在O(logn)时间内找到要插入的位置,在O(n)时间里移动元素并将新数字插入到合适的位置。 * 获得 ...
这道题的具体思路请参看 何海涛的微博:http://weibo.com/zhedahht import java.math.BigInteger; import java.util.Arrays; public class CreateBFromATencent { /** * 题目:输入一个数组A[1,2,...n],求输入B,使得数组B中的第i个数字B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[N-1]. * 要求 * 1.不得使用除法 * 2.不得新建变量--how? * see http://weibo.c ...
import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class CommonItemInTwoSortedArray { /** * 题目:给定两个已排序序列,找出共同的元素。 * 1.定义两个指针分别指向序列的开始。 * 如果指向的两个元素相等,则找到一个相同的元素;如果不等,则将指向较小元素的指针向前移动。 * 重复执行上面的步骤,直到有一个指针指向序列尾端。 * 2.如果数组大小差得很多,就遍历小的,然后在大的里二分查找 ...
public class SearchInShiftedArray { /** * 题目:给定一个固定长度的数组,将递增整数序列写入这个数组。当写到数组尾部时,返回数组开始重新写,并覆盖先前写过的数。 * 请在这个特殊数组中找出给定的整数。 * 解答: * 其实就是“旋转数组”。旋转数组的最小元素见http://bylijinnan.iteye.com/blog/1431531 * 采用类似二分查找的策略。首先比较a[0]和a[N/2],如果a[0] < a[N/2],则说明a[0,1,...,N/2]为递增子序列,否则另一部分是递增子序列。 ...
蓄水池抽样(Reservoir Sampling) 相关证明可看这个链接:http://www.cnblogs.com/HappyAngel/archive/2011/02/07/1949762.html 以下为上面这个链接的两个截图: import java.util.Arrays; import java.util.Random; public class ReservoirSampling { /** * 题目:给定一个数据流,其中包含无穷尽的搜索关键字(比如,人们在谷歌搜索时不断输入的关键字)。 * 如何才能从这个无穷尽的流中随机的选取100 ...
import java.util.ArrayList; import java.util.List; public class KickOutBadGuys { /** * 题目:13个坏人和13个好人站成一圈,数到7就从圈里面踢出一个来,要求把所有坏人都给踢出来,所有好人都留在圈里。请找出初始时坏人站的位置。 * Maybe you can find out the mathematical rule behind the question. * But we try to figure it out in Java. * It's easy t ...
public class SquareRoot { /** * 题目:判断一个自然数是否是某个数的平方。当然不能使用开方运算 * 方法1.squareRoot0 二分查找 * 方法2.squareRoot1 * 考虑等差数列 1 3 5 7 9...发现 * 1^2=1 * 2^2=1+3 * 3^2=1+3+5 * ... * 因此,N-1-3-5...若刚好可减至0,则N是某正整数的平方 */ public static void main(String[] args) { for(int i=0; ...
BigIntegerAddition.add见http://bylijinnan.iteye.com/blog/1463337 public class FactorialInAddition { /** *题目:求100的阶乘-100!(即100*99*98*...*2*1) *方法:用加法代替乘法,加法的加数用字符串表示 */ public static void main(String[] args) { for(int i=1;i<=100;i++){ System.out.println(factorial(i)); } ...
public class DeleteExtraSpace { /** * 题目:给定字符串,删除开始和结尾处的空格,并将中间的多个连续的空格合并成一个。 * 方法1.用已有的String类的trim和replaceAll方法 * 方法2.全部用正则表达式,这个我不熟 * 方法3.“重新发明轮子”,从头遍历一次 */ public static void main(String[] args) { String[] strs={ "", " ", "a&qu ...
public class MyDiv { /** * 题目:编程实现两个正整数的除法,当然不能用除法操作符。 * 方法1:除数不断乘以2,直到最接近被除数 * 方法2:二分查找 * 扩展题目:如何求出a%b的值,要求不能使用除法和求模运算! * 解答:在上面求出商(假设为c)之后,a%b=a-(b*c); */ private static boolean INVALID_INPUT; public static void main(String[] args) { int x=24; for(int y=1 ...
import java.math.BigInteger; import java.util.regex.Matcher; import java.util.regex.Pattern; public class BigIntegerAddition { /** * 题目:java实现两个大数相加,可能存在溢出。 * 如123456789 + 987654321 返回 1111111110 * 1.直接用BigInteger * 2.模拟手算加法,进位相加(暂时没有考虑负数的情况) */ public static void main(S ...
public class CountZerosInFactorial { /** * 题目:1024! 末尾有多少个0? * 参看《编程之美》 * 解答: 末尾0的个数取决于乘法中因子2和5的个数。显然乘法中因子2的个数大于5的个数,所以我们只需统计因子5的个数。 是5的倍数的数有: 1024 / 5 = 204个 是25的倍数的数有:1024 / 25 = 40个 是125的倍数的数有:1024 / 125 = 8个 是625的倍数的数有:1024 / 625 = 1个 所以1024! 中总共有204+40+8+1=253 ...
public class CountTimesInSortedArray { /** * 题目:在排序数组中,找出给定数字的出现次数,比如 [1, 2, 2, 2, 3] 中2的出现次数是3次。 * 解法:使用二分查找的方法分别找出给定数字的开始和结束位置,最坏情况下时间复杂度为O(logn) */ public static void main(String[] args) { int[] data={0,1,2,2,3,3,3,4,4,4,4,5}; for(int target:data){ int time=times(dat ...
Global site tag (gtag.js) - Google Analytics