随笔分类 -  Algorithm ACM

Acm算法

摘要:链表排序:算法-归并排序public class LinkedSort { private static class ListNode { int val; ListNode next; ListNode(int x) { val... 阅读全文
posted @ 2014-08-04 15:20 曹守鑫 阅读(315) 评论(0) 推荐(0)
摘要:A*搜寻算法,俗称A星算法,作为启发式搜索算法中的一种,这是一种在图形平面上,有多个节点的路径,求出最低通过成本的算法。常用于游戏中的NPC的移动计算,或线上游戏的BOT的移动计算上。该算法像Dijkstra算法一样,可以找到一条最短路径;也像BFS一样,进行启发式的搜索。 A*算法最为核心的部分... 阅读全文
posted @ 2014-07-02 15:55 曹守鑫 阅读(1402) 评论(0) 推荐(0)
摘要:package com.sogou.hadoop.test;public class Sudoku {/**验证该值是否合法*/ public boolean isValidSudoku(char[][] board,int x,int y){ int row,col; ... 阅读全文
posted @ 2014-06-13 16:04 曹守鑫 阅读(265) 评论(0) 推荐(0)
摘要:思路:递归,由于是二叉查找树,先选择任一结点根结点,假设为结点i,则[1,i-1]范围的结点为结点i的左子树结点,[i+1,n]范围的结点为结点i的右子树结点,则以结点i为根结点的BST个数为左,右子树可构成BST个数的乘积,基于这个思路,可以写出以下递归程序。第一种方法使用动态规划public c... 阅读全文
posted @ 2014-05-26 22:15 曹守鑫 阅读(147) 评论(0) 推荐(0)
摘要:算法:通过递归并限定上下限元素的值的范围可以计算package com.bupt.acm.leetcode;public class ValidBinary { private class TreeNode{ int val; TreeNode left; ... 阅读全文
posted @ 2014-05-26 14:43 曹守鑫 阅读(120) 评论(0) 推荐(0)
摘要:算法:1. 对root的左子树做处理,让左子树的根节点作为,根节点的右子树,并让右子树作为左子树根节点的右子树的子树2. 递归遍历右子树public void flatten(TreeNode root) { if(root==null){ return; ... 阅读全文
posted @ 2014-05-22 10:46 曹守鑫 阅读(121) 评论(0) 推荐(0)
摘要:package com.bupt.acm;import java.util.Scanner;public class HeapSort { private int getLeft(int i){ return 2*(i+1)-1; } private int ... 阅读全文
posted @ 2014-05-20 16:34 曹守鑫 阅读(141) 评论(0) 推荐(0)
摘要:/**根据完美二叉树或者非完美二叉树都可以,利用左右子树的根节点的next节点信息来连接next*/public void connect(TreeLinkNode root){ if(root==null) return; //利用父节点的next... 阅读全文
posted @ 2014-05-20 11:18 曹守鑫 阅读(138) 评论(0) 推荐(0)
摘要:for i in [n+1 N] M=rand(1,i) if(M<=n) swap the ith and Mth data证明方法:1.初始情况,当尚未选择时,出现在pool中的n个元素的概率相同都是1,证明当第n+1葛元素以n/(n+1)的概率被选中时,前n个元素在pool中的概率为... 阅读全文
posted @ 2014-05-19 22:26 曹守鑫 阅读(183) 评论(0) 推荐(0)
摘要:分析:从最小面一层开始往上计算,设dp[i][j]是以第i层j个元素为起点的最小路径和,动态规划方程如下dp[i][j] = value[i][j] + max{dp[i-1][j], dp[i-1][j+1]}因为每一层之和它下一层的值有关,因此只需要一个一位数组保存下层的值,public int... 阅读全文
posted @ 2014-05-19 11:38 曹守鑫 阅读(220) 评论(0) 推荐(0)
摘要:leetcode:好好A吧少年代码描述了六种二叉树遍历方式分别是:二叉树前序中序后续(递归和非递归方式):注意遍历方式就ok:前序和中序非递归遍历方式一样,只是加入的输出语句不同,算法描述:1.先建立一个栈,存储根节点root,并设立辅助节点tmp2.当栈不为空或者节点不为空时遍历,首先查找当前节点... 阅读全文
posted @ 2014-05-18 22:57 曹守鑫 阅读(535) 评论(0) 推荐(0)
摘要:思路:知道要用DP做,但是一开始思路是错的。后来参考了http://blog.csdn.net/pickless/article/details/12034365才意识到可以在整个区间的每一点切开,然后分别计算左子区间和右子区间的最大值,然后再用O(n)时间找到整个区间的最大值。看来以后碰到与2相关... 阅读全文
posted @ 2014-05-18 16:20 曹守鑫 阅读(189) 评论(0) 推荐(0)
摘要://字符串全排列package com.demo.acm;public class AllSortChar { public static void allSort(char[] buf,int start,int end){ if(start==end){ ... 阅读全文
posted @ 2014-05-01 22:46 曹守鑫 阅读(382) 评论(0) 推荐(0)
摘要:public class ReconstructionTree { private static class TreeNode { int val; TreeNode left; TreeNode right; public TreeNo... 阅读全文
posted @ 2014-04-16 21:59 曹守鑫 阅读(254) 评论(0) 推荐(0)
摘要:本题要求时间复杂度为log(m+n),不让合并用额外的空间:算法描述:1 选定两个数组A,B并计算长度,根据长度和m+n是偶数还是奇数,分为两种查找中位的方式;如果和为偶数:Value[(m+n)/2]+Value[(m+n)/2+1]如果为奇数:Value[(m+n)/2]2 然后通过迭代计算中位数通过假定A长度小于B,然后选择每个数组的中间k/2元素,如果A的中位数,小于B的中位数,则A中位数前面的元素都小于value(k),这样重新选择A的起始点,并减去k值为k-pa;如果,B中的小,这让B的长度减去pb,然后重新开始;重视让A的长度小于B的长度;k每次递减,m,n分别表示数组剩余长度; 阅读全文
posted @ 2014-04-08 23:25 曹守鑫 阅读(245) 评论(0) 推荐(0)
摘要:package com.bupt.acm.leetcode;public class SurroundedRegions { public void solve(char[][] board){ boolean up,down,left,right; for(int i=1;i<board.length-1;i++){ for(int j=1;j<board[0].length-1;j++){ up=down=left=right=false; if(board[i][j]=='... 阅读全文
posted @ 2014-04-06 16:55 曹守鑫 阅读(203) 评论(0) 推荐(0)
摘要:There areNchildren standing in a line. Each child is assigned a rating value.You are giving candies to these children subjected to the following requirements:Each child must have at least one candy.Children with a higher rating get more candies than their neighbors.package com.bupt.acm.leetcode;impo 阅读全文
posted @ 2014-04-04 17:33 曹守鑫 阅读(246) 评论(0) 推荐(0)
摘要:该算法更为巧妙,不用保存原始链表的映射关系,构建新节点时,指针做如下变化,即把新节点插入到相应的旧节点后面:1、构建新节点random指针:new1->random = old1->random->next, new2-random = NULL, new3-random = NULL,new4->random = old4->random->next2、恢复原始链表以及构建新链表:例如old1->next = old1->next->next, new1->next = new1->next->next本人额原算法超时: 阅读全文
posted @ 2014-04-03 22:21 曹守鑫 阅读(197) 评论(0) 推荐(0)
摘要:本文算法对于:大数据aaaaaaaaaaaaaaaaaaaaaaa;无法通过时间越界Last executed input:"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab", ["a","aa","aaa","aaaa","aaaa 阅读全文
posted @ 2014-04-03 20:20 曹守鑫 阅读(243) 评论(0) 推荐(0)
摘要:public class LRULinkedHashMap extends java.util.LinkedHashMap { public final int maxCapacity; public LRULinkedHashMap(int capacity){ this.maxCapacity=capacity; } @Override protected boolean removeEldestEntry(java.util.Map.Entry eldest) { // TODO Auto-generated method stu... 阅读全文
posted @ 2014-04-01 17:22 曹守鑫 阅读(460) 评论(0) 推荐(0)