数据结构与算法
nev1Mor
On My Way
展开
-
动态规划
作者:王勐链接:https://www.zhihu.com/question/23995189/answer/35429905来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。动态规划的本质不在于是递推或是递归,也不需要纠结是不是内存换时间。理解动态规划并不需要数学公式介入,只是完全解释清楚需要点篇幅…首先需要明白哪些问题不是动态规划可以解决转载 2017-06-23 17:41:42 · 444 阅读 · 0 评论 -
二叉搜索树的第k个结点
import java.util.Stack;/** * 二叉搜索树的第k个结点 * * @author Administrator 给定一颗二叉搜索树,请找出其中的第k大的结点。 例如, 5 / \ 3 7 /\ /\ 2 4 6 8 * 中,按结点数值大小顺序第三个结点的值为4。 */ public class test10 { public s原创 2016-03-09 22:21:17 · 214 阅读 · 0 评论 -
字符串转成整数
public class test {public static void main(String[] args) { int a = String2Int("+-123"); System.out.println(a);}public static int String2Int(String str){ if(str==null || str.length()==0){原创 2016-03-09 22:19:55 · 230 阅读 · 0 评论 -
数组中超过一半(N/2)的数)进阶 (找到出现次数超过N/K的数)
import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map.Entry;/** * 原题(数组中超过一半(N/2)的数)进阶 (找到出现次数超过N/K的数) * @author Administrator * 原题一个候选数 一次删2个 进阶原创 2016-03-09 22:18:30 · 446 阅读 · 0 评论 -
需要排序的最短子数组长度
/** * 需要排序的最短子数组长度 * @author Administrator * 如 arr=[1,5,3,4,2,6,7] 返回4 因为只有[5,3,4,2]需要排序 */ public class getMinLength { public static void main(String[] args) { int[] arr = {1,5,原创 2016-03-09 22:16:07 · 408 阅读 · 0 评论 -
给定一个无序数组,找到其中最小的K个数
/** * 给定一个无序数组,找到其中最小的K个数 * @author Administrator * */ public class getMinKNum { public static void main(String[] args) {}//利用最大堆public static int[] getMinKNumByHeap(int[]arr ,int k){原创 2016-03-09 22:14:46 · 1200 阅读 · 0 评论 -
在未排序数组中找到和为k的最长子数组长度
/* * 在未排序数组中 找到和为k的最长子数组长度 */public class getMaxLength { public static int maxLength(int[] arr, int k){if(arr==null || arr.length==0){return 0;}//这个map表示key第一次出现在value下标的位置HashMa原创 2016-03-09 21:52:12 · 737 阅读 · 0 评论 -
反转链表
public class ReverNode {class Node{int val;Node next;}//非递归public static Node reverseUnRecur(Node head){if(head==null || head.next==null){return head;}Node pre = null;Node next =原创 2016-03-09 21:50:27 · 193 阅读 · 0 评论 -
和为S的连续正数序列
题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck! 输出描述:输出所有和为S的原创 2016-03-18 23:41:06 · 206 阅读 · 0 评论 -
和为S的两个数字
题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。 输出描述:对应每个测试案例,输出两个数,小的先输出。import java.util.ArrayList;public class Solution { public ArrayList FindNumbersWithS原创 2016-03-18 23:34:49 · 350 阅读 · 0 评论 -
数组中为出现的最小正整数
/** * 数组中为出现的最小正整数 * @author Administrator * arr=[-1,2,3,4] 返回 1 * arr=[1,2,3,4] 返回5 */ public class test11 { public static void main(String[] args) { //int[] arr = {1,2,3,4}原创 2016-03-09 22:21:37 · 474 阅读 · 0 评论 -
从上到下按层打印二叉树
import java.util.ArrayList; import java.util.LinkedList;/** * 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行 * @author Administrator * */ public class test9 { public static void main(String[] args) {}原创 2016-03-09 22:22:29 · 1004 阅读 · 0 评论 -
请用rand1To5实现等概率随机产生1~7的随机函数rand1To7
public class rand1to5 { /* * 给定一个等概率随机产生1~5的随机函数rand1To5如下 public int rand1To5() { return (int) * (Math.random() * 5) + 1; } 除此之外不能使用任何额外的随机机制, * 请用rand1To5实现等概率随机产生1~7的随机函数rand1原创 2016-03-09 22:41:22 · 1347 阅读 · 0 评论 -
num的power次方
public class numofpower {public static int numpower(int num, int power) { int result = 1; int temp = num; for (; power != 0; power >>= 1) { if ((power & 1) != 0) { resul原创 2016-03-09 22:40:51 · 221 阅读 · 0 评论 -
斐波那契数列
package neu.soft.mianshi;public class feibonaqie {public static void main(String[] args) { // System.out.println(0X0F); /* * int i =1; i<<=2; System.out.println(i); */}// O(2^n)publi原创 2016-03-09 22:39:05 · 193 阅读 · 0 评论 -
左部分中的最大值减去右部分最大值的绝对值最大
public class mianshi2 { /*【题目】 给定一个长度为N(N>1)的整型数组arr,可以划分成左右两个部分, 左部分arr[0..K],右部分arr[K+1..N-1],K可以取值的范围是[0,N-2]。 求这么多划分方案中,左部分中的最大值减去右部分最大值的绝对值, 最大是多少?例如[2,7,3,1,1],当左部分为[2,7]原创 2016-03-09 22:30:37 · 768 阅读 · 0 评论 -
汉诺塔
public class hanoi { public static void main(String[] args) { hanoi(4); } public static void hanoi(int n){ if(n>0){ fun(n,”LEFT”,”MID”,”RIGHT”); }原创 2016-03-09 22:28:52 · 163 阅读 · 0 评论 -
求数组排序后相邻数的最大差值
/** * 求数组排序后相邻数的最大差值 * @author Administrator * {9,3,1,10} 返回6 */ public class test12 { public static void main(String[] args) { int[] arr = {9,3,1,10}; System.out.printl原创 2016-03-09 22:27:08 · 930 阅读 · 0 评论 -
判断是否是顺子
import java.util.ArrayList; import java.util.Collections; //判断是否是顺子 public class test6 { public static void main(String[] args) {}public static boolean isContinuous(int [] numbers) { if(num原创 2016-03-09 22:24:46 · 3495 阅读 · 0 评论 -
不用加减乘除做加法
/** * 不用加减乘除做加法 * @author Administrator * 写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。 */ public class test7 { public static void main(String[] args) { System.out.println(add(3,5));原创 2016-03-09 22:23:12 · 213 阅读 · 0 评论 -
左旋转字符串
/** * 左旋转字符串 * @author Administrator * 字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。 */ public class test8 { public static void main(String[] args) { String str = LeftRotateStri原创 2016-03-09 22:22:51 · 176 阅读 · 0 评论 -
构建乘积数组
题目描述给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。import java.util.ArrayList;public class Solution { public int[] multiply(int[] A原创 2016-03-18 23:33:12 · 201 阅读 · 0 评论 -
链表中环的入口结点
题目描述一个链表中包含环,请找出该链表的环的入口结点。/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution {原创 2016-03-18 23:32:02 · 163 阅读 · 0 评论 -
二叉搜索树的后序遍历序列
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。import java.util.Arrays;public class Solution { public boolean VerifySquenceOfBST(int [] sequence) { if原创 2016-03-17 22:07:03 · 167 阅读 · 0 评论 -
二叉树的镜像
题目描述操作给定的二叉树,将其变换为源二叉树的镜像。 输入描述:二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7原创 2016-03-16 23:58:25 · 139 阅读 · 0 评论 -
树的子结构
题目描述输入两颗二叉树A,B,判断B是不是A的子结构。/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val;原创 2016-03-16 23:57:53 · 180 阅读 · 0 评论 -
合并两个排序的链表
题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public原创 2016-03-16 23:56:18 · 145 阅读 · 0 评论 -
二进制中1的个数
题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。public class Solution { public int NumberOf1(int n) {int count = 0; if(n==0){ return count; } while(n!=0){原创 2016-03-16 23:55:36 · 150 阅读 · 0 评论 -
矩形覆盖
题目描述我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?public class Solution { public int RectCover(int target) {if(target return 1; } if(tar原创 2016-03-16 23:54:14 · 150 阅读 · 0 评论 -
变态跳台阶
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。public class Solution { public int JumpFloorII(int target) { if(target==1){ return 1; }else if (t原创 2016-03-16 23:53:30 · 150 阅读 · 0 评论 -
跳台阶
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。public class Solution { public int JumpFloor(int target) {if(target return 0; } if(target==1||target==2){原创 2016-03-16 23:52:55 · 138 阅读 · 0 评论 -
重建二叉树
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。/** * Definition for binary tree * public class TreeNode { *原创 2016-03-16 23:51:55 · 193 阅读 · 0 评论 -
二叉树中和为某一值的路径
题目描述输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。import java.util.ArrayList;import java.util.Stack;/**public class TreeNode { int val = 0; TreeNo原创 2016-03-17 22:07:36 · 160 阅读 · 0 评论 -
二叉搜索树与双向链表
题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int原创 2016-03-17 22:08:10 · 176 阅读 · 0 评论 -
删除链表中重复的结点
题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5/* public class ListNode { int val; ListNode next = null; ListNode(int val) {原创 2016-03-18 23:20:08 · 245 阅读 · 0 评论 -
对称的二叉树
题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val原创 2016-03-18 23:15:26 · 226 阅读 · 0 评论 -
二叉树的下一个结点
题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。/*public class TreeLinkNode { int val; TreeLinkNode left = null; TreeLinkNode right = null; TreeLin原创 2016-03-18 23:14:53 · 229 阅读 · 0 评论 -
数组中的逆序对
题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。public class Solution { public int InversePairs(int [] array) { if(array == null || array.length == 0 ||原创 2016-03-17 22:14:09 · 196 阅读 · 0 评论 -
二叉树的深度
题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode原创 2016-03-17 22:13:36 · 207 阅读 · 0 评论 -
平衡二叉树
题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。public class Solution { public boolean IsBalanced_Solution(TreeNode root) { if(root==null){ return true; } if(Math.abs(原创 2016-03-17 22:13:01 · 184 阅读 · 0 评论