08 2014 档案
摘要:2.1 求二进制中1的个数。2.2 求n!末尾有多少个0 和 求n!的二进制表示中最低位1的位置。2.3 找出数量超过总数一半的记录。 扩展:3个发帖都超过了总数N的1/4。2.4 十进制1~N 所有整数中1的个数; 满足F(N)=N的最大的N是多少。 扩展:CC上所有2的个数。2.5 寻找最大的k...
阅读全文
摘要:按照题意,要实现两个方法: addNewNumer(int num) 和 getMedian()维护两个priority queue:maxHeap 和 minHeap。maxHeap中存放小于中位数的元素,minHeap中存放大于中位数的元素。并且保证两个堆里元素数量相等或者max比min多一个。...
阅读全文
摘要:给定一个字符串s 和 一个包含较短字符串的数组t,设计一个方法,根据t中的每一个较短的字符换,对s进行搜索。思路:基于s建立后缀树,然后在后缀树中进行查找,返回所有可能的索引值。import java.util.ArrayList;public class Question { public ...
阅读全文
摘要:用HashMap缓存记录结果,以防止重复计算。枚举分割点,dfs。注意单词本身不能由单词本身构成,需要isOrigin符号判断下。import java.util.Arrays;import java.util.Comparator;import java.util.HashMap;public c...
阅读全文
摘要:shuffle:递归的思考,假如n-1个元素已经shuffle好了,第n个元素应该从0~n的范围内选择交换目的地。一直递归到一个元素的shuffle情况。n选m:假如n-1个元素中选m的情况已经好了,那么对于第n个元素,可以在0~n的范围内随机的选取一个元素,如果选的元素在m范围内,那就剔除掉原有的...
阅读全文
摘要:先异或求sum,然后求carry,二者的和就是结果,可使还是不能用加号,递归执行,直到b==0。因为每次carry都移位右边多出一个零,然后下一次&的时候必然后面会是0,所以每递归调用一次b后面就多一个零,直到b==0.public class Solution { public static...
阅读全文
摘要:track操作类似与插入操作。rank操作返回比当前元素小或者相等的元素数。思路:track操作插入构造BST(没有保证平衡),但是节点增加一个leftSize,这里学习一下。public class Solution { private static RankNode root = null...
阅读全文
摘要:思路:定义好Person的数据结构,按照身高和体重排好序。solutions[i]代表以person[i]结尾的能够叠起的最多人的解。solutions[0]初始化,然后求从1~n的情况。import java.util.ArrayList;import java.util.Collections;...
阅读全文
摘要:二分法变体,当查找到mid元素是空串时,同时向两边扩散寻找不为空串的索引作为mid,继续执行二分。public class Solution { public int search(String[] list, String str) { if (list == null || ...
阅读全文
摘要:思路:递归执行,子函数需要返回子链表的head和tail,所以借助内部类NodePair来实现。/** * 4 / \ 2 5 / \ \ 1 3 6 / 0 0123456 * */public ...
阅读全文
摘要:思路: 枚举分割点递归求解,可用DP优化。 注意递归终止条件。 注意 ^ & | 三种情况统计的不同。import java.util.HashMap;import java.util.Map;public class Solution { int countR(String terms,...
阅读全文
摘要:递归求解,求出已某个箱子为底,返回最高可以放的箱子堆。DP思想优化,对于已经求过的已某个箱子为底的情况,用一个map记录下来,以后直接返回即可。 注意一些clone等一些语言细节。import java.util.ArrayList;import java.util.HashMap;import ...
阅读全文
摘要:思路:对于可以选择的面值(面值比num都大,当然不可选),一次选择0次~最多选择的次数,然后递归下去,子函数只能从后面的货币开始选。import java.util.ArrayList;import java.util.List;public class Solution { int[] mo...
阅读全文
摘要:还是permutation的算法,字符串也没什么太大的区别。 先排序,然后注意如何去重。import java.util.ArrayList;import java.util.Arrays;public class Solution { public static ArrayList getP...
阅读全文
摘要:在A[0..n-1]中,满足条件 A[i]==i的索引。给定一个有序数组,设法找到其中的magic index。扩展:考虑有重复元素的情况如何处理。public class Solution { public static int magicIndex(int[] array) { ...
阅读全文
摘要:先异或,然后统计1的个数。统计1的个数可以移位一位一位看,高级的算法 n&(n-1)会消去n最低位的1.扩展 n&(n-1)==0代表什么意思:n是2的某次方或者n==0;int bitSwapRequired(int a,int b){ int count=0; for(int c=a...
阅读全文
摘要:思路:依次减去 0.5,0.25,0.125。。。 够减二进制为1,不够减二进制为0。public class Solution { public static String printBinary(double num) { if (num >= 1 || num 0) { ...
阅读全文
摘要:打印二叉树节点数值总和等于某个给定节点的所有路径,路径可以从任意节点开始,任意节点结束。比如,假设和是8,树如下 的路径有 [[5,3],[8],[5,1,2]]。 5 / \ 3 1 /\ /\4 8 2 6思路:遍历所有路径,对于每一个节点,在其路径中向后寻找sum和为targ...
阅读全文
摘要:基本模仿CC150上的思路,递归地在t1中寻找能与t2的根相同的节点,作为开始比较的开始点,然后递归的比较两个树是否相等。boolean containsTree(TreeNode t1, TreeNode t2){ if(t2==null) return true; ...
阅读全文
摘要:Related leetcode questions: BST: https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-search-tree/ BT, node always in the tree. https://le
阅读全文
摘要:5 / \ 2 6 / \ \ 1 4 7 / 3class Node{ Node left; Node right; Node parent; int val;}/**1.如果有右子树,则结果为右子树的最左节点。...
阅读全文
摘要:结合之前实现的 maxStack 和 用两个stack 实现一个Queue, 实现 MaxQueueimport java.util.Stack;public class MaxQueue { MaxStack in = new MaxStack(); MaxStack out = ne...
阅读全文
摘要:思路:用两个栈,一个用于接收(in),一个用于输出(out),输出前如果out为空需要将in中的数据导入out。import java.util.Stack;//用两个stack设计一个队列 p142public class MyQueue { Stack in; Stack out; ...
阅读全文
摘要:模拟汉诺塔的移动过程,CC答案的面向对象的太烦,写个以前学的经典的。public class Solution { public void move(int n, char a, char b, char c) { if (n == 1) { System....
阅读全文
摘要:按照算法导论上的实现,不过把下标改成从0开始了。原理:import java.util.Arrays;public class Solution { /** * 每次将堆顶元素交换到最后并从堆中除掉。 * * @param a */ public sta...
阅读全文
摘要:汉诺塔问题:P141用两个stack设计一个队列 p142 结合上题,队列实现max操作,要求尽量提高效率。(编程之美)找出二叉树中指定节点的下一个节点(中序后继),假定每个节点有父指针。p154二叉树某两个节点的公共祖先。p155判断T2是否是T1的子树。p159打印二叉树节点数值总和等于某个给...
阅读全文
摘要:Describe how you could use a single array to implement three stacks.思路1:fixed divisionpackage Question3_1;import java.util.EmptyStackException;public ...
阅读全文
摘要:采用算法导论上的实现方式,用java实现。快排算法核心的部分便是partition过程,这里的partition采取最后一个元素作为pivot,i和j两个指针都从头向后扫描,如下图所示,数组被分为4个部分。算法执行的过程:代码实现:包括快速排序, 寻找第K大元素, 洗牌算法。import java....
阅读全文
摘要:分别利用 锁、信号量、同步监视器实现了生产者消费者问题。package thread;import java.util.Random;import java.util.concurrent.Semaphore;import java.util.concurrent.locks.Condition;i...
阅读全文
摘要:Sort a linked list inO(nlogn) time using constant space complexity.https://oj.leetcode.com/problems/sort-list/思路:归并排序,递归执行。public class Solution { ...
阅读全文
摘要:Given a digit string, return all possible letter combinations that the number could represent.
阅读全文

浙公网安备 33010602011771号