数据结构
meiquanGao
这个作者很懒,什么都没留下…
展开
-
28.八大排序算法
package java2019;import java.util.ArrayList;//最小的K个数(附加8大排序算法)public class Demo28 { //1.冒泡排序 public static ArrayList<Integer> GetLeastNumbers(int [] input,int k){ ArrayList<Integer&g...原创 2019-12-24 23:34:43 · 165 阅读 · 0 评论 -
27.数组中出现次数超过一半的数字
package java2019;import java.util.Arrays;//数组中出现次数超过一半的数字public class Demo27 {//思路一:数组排序后,如果符合条件的数存在,则一定是数组中间那个数 O(NlogN) public static int MoreThanHalfNum1(int[] array){ Arrays.sort(a...原创 2019-12-20 09:06:27 · 71 阅读 · 0 评论 -
26.字符串的组合(按字典序)
package data_structures;import java.util.ArrayList;import java.util.Collections;import java.util.List;//输入一个字符串,按照字典序打印出该字符串的所有排列,如输入abc,打印出abc,acb,bac,bca,cab,cbapublic class Demo26 { public ...原创 2019-12-19 21:01:48 · 245 阅读 · 0 评论 -
25.输入两个二叉树,判断B树是不是A树的子结构
package java2019;//输入两个二叉树,判断B树是不是A树的子结构public class Demo25 { public static boolean HasSubtree(TreeNode root1,TreeNode root2){ boolean result = false; //当Tree1和Tree2都不为null,才进行比较。否则直接返回false ...原创 2019-12-19 17:04:36 · 137 阅读 · 0 评论 -
24.输入一个二叉搜索树,将该树转换为一个排序的双向链表
package java2019;import java.util.Stack;//输入一个二叉搜索树,将该树转换为一个排序的双向链表(不创建新的节点,只能调整树中节点指针的指向)//核心是中序遍历非递归算法//修改当前遍历节点与前一遍节点的指针指向public class Demo24 { //中序非递归算法 public void InorderTravel(TreeNode...原创 2019-12-19 17:03:47 · 167 阅读 · 0 评论 -
23.输入一个复杂链表,返回结果为复制后复杂链表的head
package java2019;import java.util.Random;//输入一个复杂链表,返回结果为复制后复杂链表的headpublic class Demo23 { //1.复制节点 //2.初始化新节点 //3.拆分旧链表和新链表 public RandomListNode Clon(RandomListNode pHead){ if(pHead == ...原创 2019-12-19 15:22:16 · 115 阅读 · 0 评论 -
22.二叉树中和为某值的路径 从根节点到叶子节点
package java2019;//二叉树中和为某值的路径 从根节点到叶子节点import java.util.ArrayList;public class Demo22 { static ArrayList<ArrayList<Integer>> listAll = new ArrayList<ArrayList<Integer>>...原创 2019-12-19 14:29:01 · 180 阅读 · 0 评论 -
21.判断一个数组是否是某个二叉搜索树的后续遍历的结果
package java2019;//判断一个数组,是否是某个二叉搜索树的后续遍历的结果public class Demo21 { public boolean judge(int Array[],int l,int r){ if(l>=r) return true; int i=r; while(i>1&&Array[i-1]>Array...原创 2019-12-19 11:37:16 · 135 阅读 · 0 评论 -
20.二叉树的层序遍历
package java2019;import java.util.ArrayList;import java.util.LinkedList;//思路是用ArrayList模拟一个队列//二叉树的层序遍历public class Demo20 { public ArrayList<Integer> PrinntFromTopBottom(TreeNode root){...原创 2019-12-19 10:48:29 · 79 阅读 · 0 评论 -
19.判断是否为栈的输入输出序列
package java2019;import java.util.Stack;//判断两个序列是否为栈的压入和弹出序列public class Demo19 { public boolean isPopOrder(int[] push_array,int[] pop_array){ Stack<Integer> stack = new Stack<Integer...原创 2019-12-19 10:10:29 · 429 阅读 · 0 评论 -
18.最小栈(返回栈的最小元素)
package java2019;import java.util.Stack;//定义栈的数据结构,得到栈的最小元素(定义辅助栈存储最小元素) 时间复杂度O(1)public class Demo18 { Stack<Integer> stack = new Stack<>(); Stack<Integer> smallstack = new S...原创 2019-12-19 09:44:13 · 124 阅读 · 0 评论 -
17.输入一个矩阵,按照从外向里的顺序依次打印出每个数字
package java2019;import java.util.ArrayList;//输入一个矩阵,按照从外向里顺时针的顺序依次打印出每个数字public class Demo17 { static ArrayList<Integer> a = new ArrayList<Integer>(); public void printMatrix(int[]...原创 2019-12-19 09:15:47 · 107 阅读 · 0 评论 -
16.反转树(树的镜像)
package java2019;//树的镜像public class Demo16 { public static void ReverseTree(TreeNode tree){ if(tree == null) return; //递归跳出条件 //类似递归先序遍历 TreeNode node =null; node=tree.left;...原创 2019-12-17 17:33:40 · 747 阅读 · 0 评论 -
15.合并两个排序的链表
package java2019;//合并两个排序的链表public class Demo15 { public ListNode SortMergeTwoLinkedList(ListNode list1, ListNode list2){ ListNode newlist = new ListNode(); ListNode p = newlist; while(list1!...原创 2019-12-17 17:10:01 · 76 阅读 · 0 评论 -
14.输入一个链表,反转链表,返回链表的表头
package java2019;//输入一个链表,反转链表,返回链表的表头public class Demo14 { public ListNode ReverseLinkedList(ListNode head){ ListNode p = null; ListNode t = null; while(head!=null){ //p最终变成了head , head 变成了t...原创 2019-12-17 16:43:38 · 241 阅读 · 0 评论 -
13.输入一个链表,输出该链表中倒数第K个节点
package java2019;//输入一个链表,输出该链表中倒数第K个节点public class Demo13 { public ListNode FindkThToTail(ListNode list,int k){ int count = 0; ListNode p = list; while(p!=null){ count++; p=p.getNext()...原创 2019-12-17 16:16:49 · 74 阅读 · 0 评论 -
12.数组奇偶排序
package java2019;//输入一个数组,要求奇数放在最前面,偶数放在最后面,且相对位置不变public class Demo12 { public static void ReOrderArray(int[] array){ int temp = 0; for(int i=0;i<array.length;i++){ for(int j=array.lengt...原创 2019-12-17 15:45:02 · 440 阅读 · 0 评论 -
11.快速幂
package java2019;public class Demo11 { public static double Power(double base,int exponent){ if(exponent ==0){ return 1.0; } if((base - 0.0 ==0.00001) || (base - 0.0 == -0.00001) ){ if(...原创 2019-12-17 15:23:49 · 68 阅读 · 0 评论 -
10.求二进制数中1 的个数
package java2019;import java.util.Scanner;public class Demo10 { public int NumberOf1(int n){ int count = 0; while(n!=0){ count++; n=n&(n-1); } return count; } public stati...原创 2019-12-17 15:06:51 · 75 阅读 · 0 评论 -
9.矩形覆盖
package java2019;import java.util.Scanner;public class Demo9 {public int RectCover(int target){if(target1)return 1;else if(target2)return 2;elsereturn(RectCover(target-1)+RectCover(target-2))...原创 2019-12-17 14:55:31 · 61 阅读 · 0 评论 -
8.变态跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法方法一:用传统递归法求解方法二:将递归化为非递归方法,用双重循环方法三:满足动态规划条件,进一步降低时间复杂度 分析出递归条件: 我们用f(n)来表示跳n级台阶的跳法数量, ...原创 2019-12-17 14:22:02 · 67 阅读 · 0 评论 -
7.跳台阶
package java2019;import java.util.Scanner;public class Demo8 {//跳台阶 一次跳一阶或2阶public int JumpFloor(int number){if(number==0)return 0;if(number 1)return 1;if(number2)return 2;int preprenumber ...原创 2019-12-17 14:18:24 · 305 阅读 · 0 评论 -
6.斐波那契数列,第0项为0,求第n项内容
package java2019;import java.util.Scanner;//斐波那契数列,第0项为0,求第n项内容public class Demo7 {public int Fibonacci(int n){int PrePreNum=0;int PreNum=1;int Result=0;if(n0) return 0;if(n1) return 1;for(i...原创 2019-12-06 16:09:21 · 335 阅读 · 0 评论 -
5.利用两个栈实现队列
package java2019;import java.util.Stack;//利用两个栈实现队列public class Demo5 {Stack stack1 = new Stack();Stack stack2 = new Stack();public boolean push(int node){ stack1.push(node); return true;}pu...原创 2019-12-06 15:45:58 · 62 阅读 · 0 评论 -
4.根据前序遍历和中序遍历结果重建二叉树
package java2019;import java.util.Arrays;//根据前序遍历和中序遍历结果重建二叉树public class Demo4 {public static TreeNode ReconstructBinaryTree(int[] pre,int[] in ){if(pre.length0 || in.length0)return null; //递归...原创 2019-12-06 15:32:29 · 88 阅读 · 0 评论 -
RandomListNode 复杂链表类型结构
package java2019;public class RandomListNode {int val;RandomListNode next;RandomListNode random;public RandomListNode(int val){this.val=val;}}原创 2019-12-06 14:40:22 · 813 阅读 · 0 评论 -
TreeNode 树形结构
TreeNode 树形结构package java2019;public class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int val){this.val=val;}}原创 2019-12-06 14:39:31 · 3792 阅读 · 0 评论 -
3.输入单链表,逆序打印链表
package java2019;import java.util.ArrayList;import java.util.Stack;//输入单链表,逆序打印链表public class Demo3 {//1.利用堆栈先进后出实现public ArrayList printListFromTailToHead1(ListNode listNode){Stack stack = new...原创 2019-12-06 14:20:30 · 98 阅读 · 0 评论 -
ListNode 单链表类定义
package java2019;public class ListNode {private int val;private ListNode next;public int getVal() {return val;}public void setVal(int val) {this.val = val;}public ListNode getNext() {return...原创 2019-12-05 09:18:04 · 748 阅读 · 0 评论 -
2.字符串替换
package java2019;public class Demo2 {//字符串替换//从后往前,先计算需要的空间,然后从后往前移动,则每个字符只移动一次,这样效率更高public void ReplaceSpace(char str[],int length){int count = 0;for(int i=0;i<length;i++){if(str[i] == ’ ‘...原创 2019-12-05 09:14:16 · 90 阅读 · 0 评论 -
1.二分查找求目标值是否在二维数组数组中
1.二分查找求目标值是否在二维数组数组中#**package java2019;public class Demo1 {//二分查找求目标值是否在二维数组中public static boolean IsContain(int arg[][],int target){//二分查找通过遍历每一行得到答案NlogNfor(int i=0;i<arg.length;i++){int ...原创 2019-12-05 08:51:35 · 128 阅读 · 0 评论 -
堆——堆的操作集、建造堆及打印堆中的路径
1 堆的类型定义typedef struct HeapStruct *Heap /*堆的类型定义*/struct HeapStruct { ElementType *Data; /*存储元素的数组*/ int Size; /*堆的当前元素个数*/ int Capacity; ...原创 2019-08-18 23:27:51 · 260 阅读 · 0 评论