
算法与数据结构
crazy__chen
只要有一个人爱我,懂我,愿意等我,我便勇往直前,无所不能。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
UVA1598
思路:每个优先级队列分别存储sell和buy,每个指令后都判断是否产生交易package test;import java.util.Comparator;import java.util.Iterator;import java.util.PriorityQueue;import java.util.Queue;import java.util.Scanner;import j原创 2015-02-10 15:46:20 · 1357 阅读 · 0 评论 -
归并排序java实现
package test;import java.util.Arrays;import java.util.Scanner;public class Test{ static Scanner sc = new Scanner(System.in); static String line; static int n = 8; static int[] arr = {2,原创 2015-03-09 21:23:42 · 643 阅读 · 0 评论 -
power(double d,int n)函数实现
package test;import java.util.Arrays;import java.util.Scanner;public class Test{ static Scanner sc = new Scanner(System.in); static String line; static double mpower1(double d, int n){原创 2015-03-09 21:56:02 · 1478 阅读 · 0 评论 -
合并链表
package test;import java.util.Arrays;import test.Test3.Node;public class Test2 { static class Node{ int value = -1; Node next = null; public Node(int i){ value = i; } @Overri原创 2015-03-10 21:41:11 · 970 阅读 · 0 评论 -
二叉树中和为某一值的路径
题目:输入一棵二叉树和一个整数,打印出二叉数中结点值的和为输入整数的所有路径。从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。二叉树结点的定义如下:S truct BinaryTreeNode{int m_nValue;BinaryTreeNode*m_pLeft;BinaryTreeNode*m_pRight ;};package test;import原创 2015-03-11 21:05:08 · 1034 阅读 · 0 评论 -
翻转链表
package test;public class Test3 { static class Node{ int value = -1; Node next = null; public Node(int i){ value = i; } @Override public String toString() { return value+"";原创 2015-03-10 20:54:01 · 652 阅读 · 0 评论 -
判断数组是否是搜索二叉树的后序遍历
package test;public class Test3 { static boolean check_tree(int[] arr,int low,int len){ int i = low; for(;i<len-1;i++){ if(arr[i] > arr[len-1]){ break; } } int j = i; for原创 2015-03-11 20:39:27 · 1549 阅读 · 0 评论 -
查找子树
package test;public class Test2 { static class Node{ int value = -1; Node lnext = null; Node rnext = null; public Node(int i){ value = i; } @Override public String toString(原创 2015-03-10 22:04:08 · 1239 阅读 · 0 评论 -
打印1到n位最大数
package test;import java.util.Scanner;import java.util.concurrent.TimeUnit;public class Test{ static Scanner sc = new Scanner(System.in); static String line; static class bigNum{ int n原创 2015-03-10 18:34:59 · 732 阅读 · 0 评论 -
快速排序java实现
package test;import java.util.Arrays;import java.util.Scanner;public class Test{ static Scanner sc = new Scanner(System.in); static String line; static int n = 8; static int[] arr = {2,原创 2015-03-08 22:39:51 · 709 阅读 · 0 评论 -
uva 699 - The Falling Leaves
Time limit: 3.000 seconds http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=640Each year, fall in the North Central region is accompanied by the brilli原创 2015-02-14 22:46:15 · 708 阅读 · 0 评论 -
uva10129
思路:明显的有向联通图,关键是判断是否存在欧拉道路题目只是要求输出是否可能,不要求输出排序结果要判断有向图的欧拉道路,首先要判断它的基图,也就是没有方向是否的图,是否联通,如果联通,再判断输入输出度数对于欧拉回路,要求苛刻一点,所有点的入度都要等于出度,那么就存在欧拉回路了 对于欧拉道路,要求松一点,只有一个点,出度比入度大1,这个点一定是起点; 一个点,入度比出度大1,这个点原创 2015-02-20 19:15:52 · 610 阅读 · 0 评论 -
UVA442
思路:题目坑爹。。。原来只会出现(AB)这种情况,也就是说一个括号里面只会有两个数,那么每次遇到“)”,就出栈两个数,相乘,然后进栈就可以了其他情况只要进栈就可以了,“(”不用管它java写的,输入略package test;import java.util.Stack;public class Test{ static class Matrix{ int m,原创 2015-02-11 15:08:12 · 772 阅读 · 0 评论 -
UVa 210 Concurrency Simulator(双端队列)
思路:模拟运行,根据提议有两个队列,其中等待队列是双向队列这道题关键是变量的定义,使用index来代表程序,再使用一个数组来存储每个程序执行到第几条而每个程序就用vector来存储每条语句,每个程序又存储在一个vector里面package test;import java.util.ArrayList;import java.util.LinkedList;import ja原创 2015-02-10 17:28:06 · 1228 阅读 · 0 评论 -
uva514
思路:根据题意明显C是一个栈,整个模拟是由两种情况构成的从A->C和从C->B,例如要求顺序是[5,4,1,2,3],A中的原顺序是[1,2,3,4,5],那么接下来有两个操作,如果B要求的第一个等于A中的第一个,那么直接从A->B,否则如果C的栈顶等于B要求的第一个,那么C->B如果都不是,那么只能A->C了如果以上都不成立,也就是说A里面已经没有数据了,那说明该要求顺序是不可能原创 2015-02-11 13:54:01 · 1258 阅读 · 0 评论 -
uva839
思路:输入本身就包含了递归,我们直接一边输入一边递归就可以了递归思想是这样的:假设我们已经拥有了一个判断某个子天平是否平衡的方法,称为solve()那么我判断一个天平是否平衡,可以使用这个方法先判断它的左子天平是否平衡,再判断它的右子天平是否平衡,最后计算W1D1=W2D2的公式是否平衡这里注意,我们在计算左右子天平是否平衡的同时,要记录这两个子天平的总重量,分别存在W1,W2所以原创 2015-02-14 21:28:03 · 910 阅读 · 0 评论 -
uva679
题目:有一颗满二叉树,每个节点是一个开关,初始全是关闭的,小球从顶点落下, 小球每次经过开关就会把它的状态置反,现在问第k个球下落到d层时经过的开关编号。思路:这是一个完全二叉树,我们使用一个数组来存储即可,arr[index]表示标号为index的开关状态,-1表示管(往左),1表示开(往右)还有一个关键:对于一个节点k,其左节点、右节点的编号分别为2k,2k+原创 2015-02-14 13:36:10 · 1159 阅读 · 0 评论 -
UVA122
Background背景Trees are fundamental in many branches of computer science. Current state-of-the art parallel computers such as Thinking Machines' CM-5 are based on fat trees. Quad- and octal-trees ar原创 2015-02-14 15:21:31 · 1120 阅读 · 0 评论 -
uva 548
思路:亮点是递归构造二叉树,还有就是有一个非常重要的知道点,某个子树后序遍历的最后一个结点一定是该子树的根结点,而中序遍历中左子树全位于根结点的左侧,右子树全位于根结点的右侧二叉树问题一般都可以使用递归算法,注意理清楚递归的用意package test;public class Test{ static class Node{//节点,也可以用数组 int value原创 2015-02-14 20:01:21 · 623 阅读 · 0 评论 -
模拟O(1)能返回最小值的栈
使用辅助来存储每次入栈后的最小值package test;import java.util.Arrays;public class Test2 { static int max = 10; static int n = -1; static int[] stack = new int[max], hstack = new int[max]; sta原创 2015-03-10 22:52:06 · 1076 阅读 · 0 评论 -
将无序数组中的奇数放在偶数前面
package test;import java.util.Arrays;public class Test2 { //类似快速排序 static void change(int[] arr){ int temp = arr[arr.length-1]; int start = 0; int end = arr.length-1; int cur = end; w原创 2015-03-10 20:51:25 · 1249 阅读 · 0 评论 -
镜像二叉树
package test;import java.util.LinkedList;public class Test3 { static class Node{ int value = -1; Node lnext = null; Node rnext = null; public Node(int i){ value = i; } @Overrid原创 2015-03-10 22:01:42 · 1435 阅读 · 0 评论 -
编程珠玑(开篇)--第一章习题
第一题 如果不缺内存,如何使用一个具有库的语言来实现一种排序算法以表示和排序集合?解答:使用库函数sort,或者使用TreeSet,TreeMap第二题 如何使用位逻辑(例如与、或、移位)来实现位向量?解答:package test;import java.util.Scanner;public class Main { final s原创 2015-04-26 00:11:10 · 1973 阅读 · 0 评论 -
有一个二叉树, 节点全部为整数,如何找到一个子树,它所有节点的和最大?要求编程序实现。
有一个二叉树, 节点全部为整数,如何找到一个子树,它所有节点的和最大?要求编程序实现。package test;import java.util.HashMap;import java.util.LinkedList;public class Test2 { static class Node{ int value = -1; Node lnext = n原创 2015-04-02 11:18:26 · 2313 阅读 · 1 评论 -
按照左右半区的方式重新组合单链表
给定一个单链表的头部节点head,链表长度为N。如果N为偶数,那么前N/2个节点算作左半区,后N/2个节点算作右半区;如果N为奇数,那么前N/2个节点算作左半区,后N/2+1个节点算作右半区;左半区从左到右依次记为L1->L2->...,右半区从左到右依次记为R1->R2->...。请将单链表调整成L1->R1->L2->R2->...的样子。例如:1->2->3->4调整后:1->3->2->4原创 2015-05-01 17:58:49 · 1180 阅读 · 0 评论 -
算法导论15章动态规划
钢条切割问题public class Main { int n = 10; int[] p = new int[]{1,5,8,9,10,17,17,20,24,30}; int[] r = new int[n+1]; int[] s = new int[n+1]; int solve(int n,int[] s,int c){ if(n==0) return 0; if原创 2015-05-01 16:14:45 · 1560 阅读 · 0 评论 -
统计0到n之间1的个数
问题描述给定一个十进制整数N,求出从1到N的所有整数中出现”1”的个数。 例如:N=2时 1,2出现了1个 “1” 。N=12时 1,2,3,4,5,6,7,8,9,10,11,12。出现了5个“1”。public class Main { void solve(int n){ int count = 0; for(int i=1;i<=n;i++){ int t原创 2015-05-01 22:01:59 · 1309 阅读 · 0 评论 -
数字三角形问题
1、题目大意:有一个由非负整数组成的三角形,第一行只有一个数,除了最下行之外每个数的左下方和右下方各有一个数,如图 1 3 2 4 10 1 4 3 2 20从第一行的数开始,每次可以往左下或右下走一格,直到走到最下行,把沿途经过的数全部加起来,如何走才能使得这个和尽量大、/** * 递推计算 * @param ma原创 2015-05-06 09:33:52 · 1440 阅读 · 0 评论 -
最长公共子序列&最长公共子串
最长公共子序列 & 最长公共子串的区别:找两个字符串的最长公共子串,这个子串要求在原字符串中是连续的。而最长公共子序列则并不要求连续。最长公共子序列的问题参考:最长公共子序列。String solve(String str1,String str2){ StringBuilder sb = new StringBuilder(); if (str1 == null || str1.原创 2015-05-01 23:09:29 · 1134 阅读 · 0 评论 -
常见排序java实现
package test;import java.util.ArrayList;import java.util.Arrays;public class Test4 { /** * 插入排序 * 时间复杂度O(n^2) * 空间复杂度O(1) * 稳定排序 * 最好O(n),最坏O(n^2) */ static void insertSolve(int[]原创 2015-03-19 20:59:16 · 961 阅读 · 0 评论 -
经典DP题目-滑雪问题
题目描述如下:Michael喜欢滑雪这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个区域中最长底滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子 1 2 3 4 516 17 18 19 615 24 25 20 714 23 22 2原创 2015-04-01 22:21:50 · 4261 阅读 · 1 评论 -
UVa 116 - Unidirectional TSP
动态规划解决#include #include #include #include #include#include#include#includeusing namespace std;#define INF 1<<20;int main() { int arr[][6]={{3,4,1,2,8,6}, {6,1,8,2,7,4}, {5原创 2015-04-01 21:17:34 · 1055 阅读 · 0 评论 -
查找数组中出现次数超过一半的数字
package test;public class Test3 { static int solve(int[] arr,int len){ int index = -1; int mid = (len)/2; int low = 0; int high = len-1; while(index != mid){ index = partition(原创 2015-03-11 23:31:33 · 1106 阅读 · 0 评论 -
第一个只出现一次的字符
题目:在字符串中找出第一个只出现一次的字符。如输入“abaccdeff”,则输出‘b’。package test;public class Test3 { static void solve(char[] arr){ int[] hashmap = new int[256]; for(int i=0,len=arr.length;i<len;i++){ hashmap原创 2015-03-12 21:12:35 · 808 阅读 · 0 评论 -
丑数
因子中仅仅包含2、3、5的数,称为丑数。比如说14,就不是丑数,因为因子包含7。请输出所有丑数中的第n个丑数。package test;public class Test3 { static void solve(int n){ int[] stack = new int[n]; stack[0] = 1; int cur = 1; int index_原创 2015-03-12 21:03:58 · 871 阅读 · 0 评论 -
把数组排成最小数
package test;import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;import java.util.TreeMap;import java.util.TreeSet;public class Test3 { static void solve(S原创 2015-03-12 20:33:35 · 926 阅读 · 0 评论 -
查找最小的k个数
寻找最小的K个数题目描述:查找最小的K个数题目:输入n个整数,输出其中最小的K个数例如,输入1、2、3、4、5、6、7、8这8个数字,则最小的4个数字为1、2、3、4。package test;import java.util.ArrayList;import java.util.Collections;import java.util.TreeMap;import原创 2015-03-12 18:52:52 · 938 阅读 · 0 评论 -
带权二叉树路径所代表的所有整数和
package test;import java.util.Arrays;public class Test2 { static class Node{ int value = -1; Node lnext = null; Node rnext = null; public Node(int i){ value = i; } @Ove原创 2015-03-24 11:58:44 · 1587 阅读 · 0 评论 -
象棋问题
package test;import java.util.Arrays;import java.util.concurrent.TimeUnit;public class Test3 { static void solve(){ byte i = 81; while(i-->0){ if(i/9%3==i%9%3){ continue; }原创 2015-03-24 12:00:09 · 1104 阅读 · 0 评论 -
全排列
package test;import java.util.Arrays;import java.util.Scanner;import java.util.concurrent.TimeUnit;public class Test{ static Scanner sc = new Scanner(System.in); static String line; st原创 2015-03-24 11:55:40 · 1022 阅读 · 0 评论