每日算法
这是一个关于算法进阶的专栏,希望能够每天坚持。
JH_WW
这个作者很懒,什么都没留下…
展开
-
KMP
···package newcoder;public class KMP { /** * 判断str1中是否有str2,如果有返回在str1中的开始下标 * * @param str1 * @param str2 * @return */ public int getIndex(String str1, Str...原创 2018-08-11 17:48:55 · 314 阅读 · 0 评论 -
二叉查找树中删除一个节点
import java.util.Stack;/** * @Author JH * @CreateDate 18-6-11 * @Description 在二叉查找树中删除一个节点 * 1.如果该节点是叶子节点 删除该节点 * 2.如果该节点有左子树 将左子树的根节点代替该节点 * 3.如果该节点只有右子树 将右子树根节点代替该节点 * 4.既有左节点又有右节点,用右节点代替该...原创 2018-06-11 22:42:16 · 1165 阅读 · 0 评论 -
翻薄饼
/** * @Author JH * @CreateDate 18-6-12 * @Description 翻薄饼 有n张大小各不相同的薄饼,一张叠在另一张上面 将大的放在下边, * 先查找最大的数,如果这个数在最后,不用进行操作,如果这个数在第一位,只需要翻一次,即数组整体换位, * 否则要进行两次交换,第一次将这个数换到第一位,然后再转至数组,使得这个数变为最后一个 */pub...原创 2018-06-12 18:27:32 · 746 阅读 · 0 评论 -
约瑟夫斯问题
package com.dugstudio.practiceBook;/** * @Author JH * @CreateDate 18-6-10 * @Description 约瑟夫斯问题 */public class JosephusProblem { /** * 当n为奇数时f(n)=2*f((n-1)/2)+1 * 当n为偶数时f(n)=2*f(n...原创 2018-06-10 22:29:24 · 946 阅读 · 0 评论 -
插值查找
import java.util.Arrays;/** * @Author JH * @CreateDate 18-6-11 * @Description 插值查找 */public class InsertSearch { /** * * @param array 待查找的数组 * @param n 查找的值 * @param lef...原创 2018-06-11 15:27:35 · 314 阅读 · 0 评论 -
数组中的逆序对
package com.dugstudio.SwordToOfferBook.Singleton.Interview;import java.util.Arrays;/** * @Author JH * @CreateDate 18-6-10 * @Description 数组中的逆序对 */public class InversePairs { /** * ...原创 2018-06-10 19:03:00 · 205 阅读 · 0 评论 -
两个链表的第一个公共节点
package com.dugstudio.SwordToOfferBook.Singleton.Interview;/** * @Author JH * @CreateDate 18-6-10 * @Description 两个链表的第一个公共节点 */public class FindFirstCommonNode { public ListNode FindFirstC...原创 2018-06-10 19:28:17 · 232 阅读 · 0 评论 -
判断给定出栈序列是否为该给定进栈次序的弹出顺序
package com.dugstudio.SwordToOfferBook.Singleton.Interview;import java.util.Stack;/** * @Author JH * @CreateDate 18-6-9 * @Description 判断给定出栈序列是否符合 进栈次序的出栈可能 * 利用辅助栈 */public class IsPopOrde...原创 2018-06-09 15:50:46 · 355 阅读 · 0 评论 -
判断该数组是不是某二叉搜索树的后序遍历的结果
/** * @Author JH * @CreateDate 18-6-9 * @Description */public class VerifySquenceOfBST { //方法一 public boolean VerifySquenceOfBST(int [] sequence) { if (sequence==null||sequence....原创 2018-06-09 16:58:19 · 380 阅读 · 0 评论 -
反转链表
package com.dugstudio.SwordToOfferBook.Singleton.Interview;/** * @Author JH * @CreateDate 18-6-8 * @Description 反转链表 */ public class ReverseList { public Node ReverseList(Node head){ ...原创 2018-06-08 17:12:43 · 224 阅读 · 0 评论 -
常数时间内查找栈中最小的元素
import java.util.Stack;/** * @Author JH * @CreateDate 18-6-9 * @Description 栈中最小的元素 */public class MinStack <E extends Integer>{ private Stack<E> minStack=new Stack<E>();...原创 2018-06-09 10:49:17 · 1370 阅读 · 0 评论 -
字典序的全排列
import java.util.ArrayList;import java.util.Collections;import java.util.List;/** * @Author JH * @CreateDate 18-6-7 * @Description 字典序的全排列 */public class LexicographicPermute { privat...原创 2018-06-07 22:04:12 · 488 阅读 · 0 评论 -
二进制反射格雷码 幂集
import java.util.ArrayList;import java.util.List;/** * @Author JH * @CreateDate 18-6-7 * @Description 二进制反射格雷码 幂集 */public class BRGC { private List<String> l1; public List<St...原创 2018-06-07 22:47:56 · 924 阅读 · 0 评论 -
打印小于n位的所有数字
package com.dugstudio.SwordToOfferBook.Singleton.Interview;/** * @Author JH * @CreateDate 18-6-8 * @Descriptionv 从1 打印n位数 eg:1,2,3...,999...999 */public class Print1ToMaxOfNDigits { public ...原创 2018-06-08 16:04:12 · 398 阅读 · 0 评论 -
在O(1)时间内删除链表节点
package com.dugstudio.SwordToOfferBook.Singleton.Interview;/** * @Author JH * @CreateDate 18-6-8 * @Description 在O(1)时间内删除链表节点 */class Node{ public Integer value; public Node next;}pu...原创 2018-06-08 16:07:24 · 389 阅读 · 0 评论 -
希尔排序
/** * @Author JH * @CreateDate 18-6-7 * @Description 希尔排序 */ //使用int数组时要将泛型继承改为Integer这样才能使用compareTopublic class ShellSort <E extends Character> { public void shellSort(E [] array,in...原创 2018-06-07 15:04:46 · 180 阅读 · 0 评论 -
拓扑排序的两种实现DFS和减一思想
package com.dugstudio.practiceBook;import java.util.ArrayList;import java.util.List;import java.util.Stack;/** * @Author JH * @CreateDate 18-6-7 * @Description 拓扑排序 对于图中的每一条边,边的起始点总是排在终点之前 *...原创 2018-06-07 18:24:45 · 601 阅读 · 0 评论 -
数值的整数次方
数值的整数次方/** * @Author JH * @CreateDate 18-6-2 * @Description 数值的整数次方 */public class Power { public double Power(double base, int exponent) { if (base!=0&&exponent==0)return 1...原创 2018-06-02 21:46:42 · 388 阅读 · 1 评论 -
旋转数组最小的数
旋转数组最小的数import java.util.ArrayList;/** * @Author JH * @CreateDate 18-6-1 * @Description 旋转数组最小的数 * 利用旋转数组两部分有序的特点,使用二分法划分 如果中间值大于末尾值则说明最小数在mid-high之间 * 如果中间值小于low的值说明最小值在low-mid之间, */public ...原创 2018-06-01 22:02:55 · 217 阅读 · 0 评论 -
十进制和二十六进制转换
十进制和二十六进制转换 /** * @Author JH * @CreateDate 18-6-1 * @Description A表示第一列 B表示第二列 C表示第三列...Z表示第26列 AA表示第27列... * * 输入一个字符串 输出他表示第几列 */ public int get(String str){ char s;in...原创 2018-06-01 22:57:45 · 2215 阅读 · 0 评论 -
十进制转成二进制中1的个数
解法一:让临时变量每次乘以二再与源数字相与,测试每一位上的数字是否为1 public int NumberOf1(int n) { int temp=1,count=0; while(temp!=0){ if((temp&n)!=0){ count++; } temp=te...原创 2018-06-02 21:03:52 · 978 阅读 · 0 评论 -
从尾到头打印链表每个节点的值
package com.dugstudio.SwordToOfferBook.Singleton.Interview;import java.util.ArrayList;import java.util.Stack;/** * @Author JH * @CreateDate 18-5-30 * @Description 输入一个链表,从尾到头打印链表每个节点的值。 */ c...原创 2018-05-30 22:50:54 · 277 阅读 · 0 评论 -
B-树 B+树定义与简单的操作
B-树 B+树定义与简单的操作 B-树的定义 节点的孩子节点的最大数称为阶用m表示 所有的叶子节点在同一层,并且不带信息 每个节点最多含有m颗子树,最多含有m-1个关键字 根节点不是终端节点那么根节点至少有两个子树 除根节点以外其他非叶子节点至少有m/2向上取整个子树 每个非叶子节点的结构为:n,p0,k1,p1,k2,p2...原创 2018-05-31 22:26:31 · 1877 阅读 · 0 评论 -
两个队列实现栈
两个队列实现栈import java.util.LinkedList;import java.util.Queue;import java.util.Stack;/** * @Author JH * @CreateDate 18-6-1 * @Description 两个队列实现栈 */public class StackToQueue { private Queu...原创 2018-06-01 18:57:41 · 173 阅读 · 0 评论 -
求两个整数之和 找出所有和为S的连续正数序列 字符串循环左移(ROL)
求两个整数之和 找出所有和为S的连续正数序列 字符串循环左移(ROL)package com.dugstudio.SwordToOffer;import java.util.ArrayList;/** * @Author JH * @CreateDate 18-5-27 * @Description */public class FindContinuousSequenc...原创 2018-05-27 22:11:23 · 221 阅读 · 0 评论 -
排序二维数组查找
排序二维数组查找/** * @Author JH * @CreateDate 18-5-30 * @Description 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。 */public class TwoDimensionArrayLookup { public boolean Find(int target, int [...原创 2018-05-30 21:32:52 · 362 阅读 · 0 评论 -
数组拼接成最小的数字
数组拼接成最小的数字package com.dugstudio.SwordToOffer;import jdk.nashorn.internal.ir.IdentNode;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.Li...原创 2018-05-26 23:14:27 · 1167 阅读 · 0 评论 -
给定范围n内给定数字m的个数
给定范围n内给定数字m的个数求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数? 为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。 ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数。 编程之美上给出的规律:如果第i位(自右至左,从1开始标号)上的...原创 2018-05-26 23:17:10 · 1201 阅读 · 0 评论 -
树的深度 递归非递归实现
树的深度 递归非递归实现package com.dugstudio.SwordToOffer;import java.util.LinkedList;/** * 树的深度递归和非递归算法 */class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; p...原创 2018-05-26 23:18:52 · 1936 阅读 · 0 评论 -
丑数
原创 2018-05-08 22:34:28 · 138 阅读 · 0 评论 -
第一个只出现一次的字符
第一个只出现一次的字符package SwordToOffer;import java.util.*;/** * Create by ~JH~ on 2018/5/8 * 在一个字符串(1<=字符串长度<=10000,全部由字母组成) * 中找到第一个只出现一次的字符,并返回它的位置 */public class FirstNotRepeatingChar { ...原创 2018-05-08 22:52:42 · 179 阅读 · 0 评论 -
出现的次数超过数组长度的一半的数字
出现的次数超过数组长度的一半的数字package SwordToOffer;import java.util.HashMap;import java.util.Map;import java.util.Set;/** * Create by ~JH~ on 2018/5/2 * 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 * 例如输入一个长度为9的数组...原创 2018-05-02 08:58:58 · 290 阅读 · 0 评论 -
连续子数组的最大和
连续子数组的最大和package SwordToOffer;/** * Create by ~JH~ on 2018/5/2 * 连续子数组的最大和 */public class FindGreatestSumOfSubArray { public int FindGreatestSumOfSubArray(int[] array) { int max=...原创 2018-05-02 09:12:33 · 158 阅读 · 0 评论 -
搜索二叉树转换为双向链表
搜索二叉树转换为双向链表package SwordToOffer;import java.util.Stack;/**中序遍历的思想 * Create by ~JH~ on 2018/5/1 * 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。 * 要求不能创建任何新的结点,只能调整树中结点指针的指向。 */public class TreeConvertToL...原创 2018-05-01 23:19:20 · 197 阅读 · 0 评论 -
图的广度优先遍历
图的广度优先遍历package sort;import java.util.ArrayDeque;import java.util.ArrayList;import java.util.List;import java.util.Queue;/**图的广度优先遍历 * Create by ~JH~ on 2018/4/30 */public class BFS { ...原创 2018-04-30 13:00:04 · 230 阅读 · 0 评论 -
重建二叉树
重建二叉树package SwordToOffer;import javax.swing.tree.TreeNode;/** * Create by ~JH~ on 2018/4/30 * 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。 * 假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 * 例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍...原创 2018-04-30 15:08:55 · 128 阅读 · 0 评论 -
两个栈实现队列
两个栈实现队列import java.util.Stack;/** * Create by ~JH~ on 2018/4/30 * 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 */public class StackToQueue { Stack&lt;Integer&gt; stack1 = new Stack&lt;Inte...原创 2018-04-30 15:32:34 · 140 阅读 · 0 评论 -
矩形覆盖
矩形覆盖package SwordToOffer;/** * Create by ~JH~ on 2018/4/30 * 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。 * 请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形, * 总共有多少种方法? * 递推公式f(n)=f(n-1)+f(n-2) */public class RectCover { ...原创 2018-04-30 16:05:39 · 144 阅读 · 0 评论 -
调整数组顺序使奇数位于偶数前面
调整数组顺序使奇数位于偶数前面package SwordToOffer;import java.util.ArrayList;import java.util.List;/** * Create by ~JH~ on 2018/4/30 * 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分, * 所有的偶数位于位于数组的后半部分,并保...原创 2018-04-30 17:01:32 · 138 阅读 · 0 评论 -
叉树的镜像
叉树的镜像package SwordToOffer;/** * Create by ~JH~ on 2018/4/30 * 操作给定的二叉树,将其变换为源二叉树的镜像。 */public class MirrorTree { class TreeNode { int val = 0; TreeNode left = null; ...原创 2018-04-30 17:21:55 · 181 阅读 · 0 评论