手撕算法题
三名狂客
success without applause,diligence without reward!Becoming、Cognifying、Flowing、Screening、Accessing、Sharing、Filtering、Remixing、Interacting、Tracking、Questioning、Beginning.
展开
-
设计RandomPool结构
import java.util.*;//设计RandomPool结构public class RandomPool<V>{ Set<V>set=new LinkedHashSet<>(); //插入值 public void insert(V key) { set.add(key); ...翻译 2018-04-07 13:50:38 · 423 阅读 · 0 评论 -
调整[0,x)区间上的数出现的概率
//调整[0,x)区间上的数出现的概率public class GetRandom{ //获得返回x^k概率的数 public static double randPowerK(int k) { if(k<1) { return 0; } double res=-1;...翻译 2018-04-07 14:05:46 · 317 阅读 · 0 评论 -
两个有序数组间相加和的Top k问题
import java.util.*;//两个有序数组间相加和的Top k问题public class FindArrTopK{ //堆节点的定义 public static class HeapNode{ public int row; public int col; public int value; ...翻译 2018-04-23 13:52:03 · 2937 阅读 · 1 评论 -
出现次数的top k问题
import java.util.*;import java.util.Map.*;//出现次数的top k问题public class GetTopKProblem{ //堆节点定义 public static class Node{ public String str; public int times; ...翻译 2018-04-23 14:11:19 · 1115 阅读 · 0 评论 -
出现次数top K的进阶问题
import java.util.HashMap;//出现次数top K的进阶问题public class TopKAdvanceProblem{ //堆节点定义 public static class Node { public String str; public int times; public Node(Str...翻译 2018-04-23 14:37:08 · 384 阅读 · 0 评论 -
设计一个没有扩容负担的堆结构
import java.util.*;//设计一个没有扩容负担的堆结构public class DesignHeap{// binary tree node contains parent reference(包含指向父类二叉树) public static class Node<K> { public K value; publ...翻译 2018-04-19 16:40:33 · 284 阅读 · 0 评论 -
随时找到数据流的中位数
一、解题思路二、具体代码import java.util.*;//随时找到数据流的中位数public class FindMidNum{ //利用大、小根堆法解决 private MyHeap<Integer>minHeap; //小根堆 private MyHeap<Integer>maxHeap; //大根...翻译 2018-04-20 13:52:02 · 696 阅读 · 0 评论 -
Manacher算法(求最长回文字符串长度)
//public class StringProblem{ //Manacher算法 预处理 public static char[] manacherString(String str) { char[] charArr = str.toCharArray(); char[] res = new char[str.length() ...翻译 2018-04-24 20:58:11 · 540 阅读 · 0 评论 -
字符串的排列
一、分析 二、解法import java.util.*;public class Solution { public ArrayList<String> Permutation(String str) { ArrayList<String>arrayList=new ArrayList<>(); if(...翻译 2018-05-09 14:48:31 · 250 阅读 · 0 评论 -
经典算法KMP
//KMP算法public class KMPTest{ //方法:获得模式串在母串的位置 public static int getIndexOf(String s,String m){ if(s==null||m==null||m.length()<1||s.length()<m.length()){ return...翻译 2018-04-25 09:22:42 · 276 阅读 · 0 评论 -
丢棋子问题
//丢棋子问题public class ThrowChessProblem{ //(1)递归的方式计算(时间复杂度为O(n!)) public static int solution1(int nlevel,int kchess){ if(nlevel<1||kchess<1){ return 0; ...翻译 2018-04-25 10:23:47 · 1065 阅读 · 0 评论 -
在两个长度相等的排序数组中找到上中位数
import java.util.*;//在两个长度相等的排序数组中找到上中位数public class FindShangMidNum{ //找到两个数组的上中位数 public static int getShangMidNum(int[]arr1,int[]arr2) { if((arr1==null&&arr2==nul...翻译 2018-04-21 17:17:57 · 711 阅读 · 0 评论 -
连续子数组的最大和
一、分析使用动态规划 F(i):以array[i]为末尾元素的子数组的和的最大值,子数组的元素的相对位置不变 F(i)=max(F(i-1)+array[i] , array[i]) res:所有子数组的和的最大值 res=max(res,F(i))如数组[6, -3, -2, 7, -15, 1, 2, 2] 初始状态: F(0)=6 res=6 ...翻译 2018-05-10 10:49:39 · 160 阅读 · 0 评论 -
二叉树的镜像
class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}public class Solution { //方法二:精...原创 2018-05-03 21:56:04 · 380 阅读 · 0 评论 -
树的子结构
class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}public class Solution { public boole...翻译 2018-05-03 20:12:38 · 116 阅读 · 0 评论 -
判断给定数字中1的个数
public class Solution { //一、找规律的解法 public int NumberOf1Between1AndN_Solution(int n) { if(n<=0) return 0; if(n<10) return 1; int re=0; ...翻译 2018-05-10 13:03:50 · 971 阅读 · 0 评论 -
画匠问题(动态规划)
import java.util.*;//画匠问题public class PainterProblem{ //(1)获得完成所有画作所需要的最少时间(动态规划的方法) public static int getTime(int[]arr,int num){ if(arr==null||arr.length==0||num<1) ...翻译 2018-04-26 10:54:03 · 959 阅读 · 0 评论 -
邮局选址问题
import java.util.*;//邮局选址问题public class PostOfficeArr{ //(1)动态规划法 public static int minDistances1(int[] arr, int num) { if (arr == null || num < 1 || arr.length < num) { ...翻译 2018-04-26 11:20:44 · 2203 阅读 · 0 评论 -
二叉树的镜像
class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}public class Solution { //方法二:精...原创 2018-05-04 11:30:19 · 132 阅读 · 0 评论 -
顺时针打印矩阵
import java.util.ArrayList;public class Solution { public ArrayList<Integer> printMatrix(int [][] matrix) { if(matrix==null||matrix.length==0||matrix[0].length==0) ret...原创 2018-05-04 11:31:44 · 209 阅读 · 0 评论 -
反转单链表
一、反转单链表//反转单链表链表class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}public class Solution { public ListNode ReverseList(ListNode h...原创 2018-04-26 15:04:43 · 242 阅读 · 0 评论 -
把数组排成最小的数
import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;public class Solution { public String PrintMinNumber(int [] numbers) { String str=""; i...翻译 2018-05-11 10:40:07 · 140 阅读 · 0 评论 -
栈的压入、弹出序列
import java.util.Stack;public class Solution { public boolean IsPopOrder(int [] pushA,int [] popA) { if(pushA.length==0||popA.length==0) { return false; ...翻译 2018-05-05 11:01:33 · 196 阅读 · 0 评论 -
第一个只出现一次的字符
import java.util.*;public class Solution { public int FirstNotRepeatingChar(String str) { if(str==null||str.length()==0) return -1; //保证存储在map的键值对有序 Linked...原创 2018-05-11 16:54:52 · 238 阅读 · 0 评论 -
约瑟夫环问题
public class Solution { //约瑟夫环问题 public int LastRemaining_Solution(int n, int m) { if(n<1||m<1) return -1; if(n==1) return 0; Node head...原创 2018-05-18 10:13:00 · 261 阅读 · 0 评论 -
不用加减乘除求两个数的和
public class Solution { public int Add(int num1,int num2){ while (num2!=0) { int temp=num1^num2; num2=(num1&amp;num2)&lt;&lt;1; num1=temp; }...翻译 2018-05-18 18:28:46 · 1594 阅读 · 0 评论 -
重建二叉树
class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; }} //重建二叉树public class Solution { public TreeNode reConstructBinaryTree(int [] pre,int...翻译 2018-04-27 19:40:44 · 251 阅读 · 0 评论 -
利用两个栈实现一个队列
import java.util.Stack;public class Solution { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<Integer>(); public void push(i...原创 2018-04-28 10:34:34 · 240 阅读 · 0 评论 -
数组中的逆序对
public class Solution { public int count=0; //方法一、暴力破解 public int InversePairs(int [] array) { if(array==null||array.length==0){ return 0; } int p=0...原创 2018-05-13 10:24:14 · 336 阅读 · 0 评论 -
将字符串转换为数字
public class Solution { public int StrToInt(String str) { if(str==null||str.length()==0) return 0; int count=0; boolean tag=true; if(str.c...原创 2018-05-19 15:41:10 · 2387 阅读 · 0 评论 -
数组中重复的数字
import java.util.*;public class Solution { // Parameters: // numbers: an array of integers // length: the length of array numbers // duplication: (Output) the du...翻译 2018-05-19 16:38:48 · 181 阅读 · 0 评论 -
青蛙跳台阶
题目描述(1)一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。题目描述(2)一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。题目描述(3)我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?p...原创 2018-04-28 19:24:59 · 396 阅读 · 0 评论 -
构建乘积数组
对于第一个for循环第一步:b[0] = 1;第二步:b[1] = b[0] * a[0] = a[0]第三步:b[2] = b[1] * a[1] = a[0] * a[1];第四步:b[3] = b[2] * a[2] = a[0] * a[1] * a[2];第五步:b[4] = b[3] * a[3] = a[0] * a[1] * a[2] * a[3];然后对于第二...翻译 2018-05-20 09:17:11 · 489 阅读 · 0 评论 -
正则表达式匹配
public class Solution { //(1)调用库函数 public boolean match(char[] str, char[] pattern) { return new String(str).matches(new String(pattern)); }//(2)正规匹配方式public boolean matc...翻译 2018-05-20 10:20:16 · 215 阅读 · 0 评论 -
二叉搜索树的后序遍历序列
public class Solution { //方法二,非递归,找规律 public boolean VerifySquenceOfBST(int [] sequence) { boolean result=true; if(sequence==null||sequence.length==0) { ...原创 2018-05-07 12:41:58 · 252 阅读 · 0 评论 -
二叉树中和为某一值的路径
import java.util.ArrayList;import java.util.Stack;class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val;...翻译 2018-05-07 14:01:53 · 150 阅读 · 0 评论 -
表示数值的字符串
字符串是否是数字public class Solution { //(1)使用库 public boolean isNumeric(char[] str) { if(str==null||str.length==0) return false; try{ double d=Double.parseDo...翻译 2018-05-20 10:45:35 · 240 阅读 · 0 评论 -
求二叉树的深度
一、二叉树深度和高度概念 一般书籍都是表示:二叉树的最大层数,高度即:从叶子节点往根节点数,深度则相反. 如图:二叉树的深度和高度都为3 二、求一棵二叉树的深度 class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public Tr...原创 2018-05-14 13:20:13 · 447 阅读 · 0 评论 -
链表中环的入口结点
一、分析 判断链表有环的算法中出现过的策略,分别按1x和2x速度遍历,总会相遇。假设环长为n。 容易知道,当1x的指针p1和2x的指针p2相遇时,p1走了x步,p2走了2x步,而p2比p1多走的,有两部分: (1)环内部,p1还没有走过的;(2)环内部,p1和p2重合的 这两部分加起来就是整个环。那么其实p2比p1多走的就是这么一个环的距离(假设距离为n),也就是说 2x-x=n...翻译 2018-05-21 13:13:55 · 129 阅读 · 0 评论 -
复杂链表的复制
链表复制class RandomListNode { int label; RandomListNode next = null; RandomListNode random = null; RandomListNode(int label) { this.label = label; }}public class Solu...原创 2018-05-08 10:32:34 · 264 阅读 · 0 评论