
Algorithm
文章平均质量分 59
spallation
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
211 Add and Search Word - Data structure design
Trie 树 + 深搜public class WordDictionary { public TrieNode root; public WordDictionary(){ root = new TrieNode(); } public void addWord(String word) { if(word==null||word.length()==0){原创 2016-01-04 16:06:00 · 288 阅读 · 0 评论 -
堆排序(C++实现)
#include#include#includeusing namespace std;void swap(int arr[], int len, int p);void buildHeap(int arr[], int len);void heapSort(int arr[], int len);void printArr(int arr[], int len);int main原创 2016-04-07 11:16:06 · 245 阅读 · 0 评论 -
回文链表
题目描述请编写一个函数,检查链表是否为回文。给定一个链表ListNode* pHead,请返回一个bool,代表链表是否为回文。测试样例:{1,2,3,2,1}返回:true{1,2,3,2,3}返回:falseimport java.util.*;/*public class ListNode { int val; ListNod原创 2016-04-14 20:06:12 · 410 阅读 · 0 评论 -
链式A+B
题目描述有两个用链表表示的整数,每个结点包含一个数位。这些数位是反向存放的,也就是个位排在链表的首部。编写函数对这两个整数求和,并用链表形式返回结果。给定两个链表ListNode* A,ListNode* B,请返回A+B的结果(ListNode*)。测试样例:{1,2,3},{3,2,1}返回:{4,4,4}import java.util.*;/*pub原创 2016-04-14 19:47:11 · 343 阅读 · 0 评论 -
链表分割
题目描述编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前给定一个链表的头指针 ListNode* pHead,请返回重新排列后的链表的头指针。注意:分割以后保持原来的数据顺序不变。方法一:import java.util.*;/*public class ListNode { int val; Lis原创 2016-04-14 19:27:48 · 287 阅读 · 0 评论 -
访问单个节点的删除
题目描述实现一个算法,删除单向链表中间的某个结点,假定你只能访问该结点。给定带删除的节点,请执行删除操作,若该节点为尾节点,返回false,否则返回true。import java.util.*;/*public class ListNode { int val; ListNode next = null; ListNode(int va原创 2016-04-13 21:20:13 · 233 阅读 · 0 评论 -
链表中倒数第k个结点
题目描述输入一个链表,输出该链表中倒数第k个结点。/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution { public ListNod原创 2016-04-13 20:12:18 · 202 阅读 · 0 评论 -
清除行列
题目描述请编写一个算法,若MxN矩阵中某个元素为0,则将其所在的行与列清零。给定一个MxN的int[][]矩阵(C++中为vector)mat和矩阵的阶数n,请返回完成操作后的int[][]矩阵(C++中为vector),保证n小于等于300,矩阵中的元素为int范围内。测试样例:[[1,2,3],[0,1,2],[0,0,1]]返回:[[0,0,3],[0,0原创 2016-04-09 22:21:22 · 227 阅读 · 0 评论 -
像素翻转
题目描述有一副由NxN矩阵表示的图像,这里每个像素用一个int表示,请编写一个算法,在不占用额外内存空间的情况下(即不使用缓存矩阵),将图像顺时针旋转90度。给定一个NxN的矩阵,和矩阵的阶数N,请返回旋转后的NxN矩阵,保证N小于等于500,图像元素小于等于256。测试样例:[[1,2,3],[4,5,6],[7,8,9]],3返回:[[7,4,1],[8,5,2原创 2016-04-09 21:55:16 · 240 阅读 · 0 评论 -
集合栈
题目描述请实现一种数据结构SetOfStacks,由多个栈组成,其中每个栈的大小为size,当前一个栈填满时,新建一个栈。该数据结构应支持与普通栈相同的push和pop操作。给定一个操作序列int[][2] ope(C++为vector>),每个操作的第一个数代表操作类型,若为1,则为push操作,后一个数为应push的数字;若为2,则为pop操作,后一个数无意义。请返回一个i原创 2016-04-17 19:49:45 · 289 阅读 · 0 评论 -
用两个栈实现队列
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。import java.util.Stack;public class Solution { Stack stack1 = new Stack(); Stack stack2 = new Stack(); public void push(int nod原创 2016-04-17 20:22:16 · 206 阅读 · 0 评论 -
找出缺失的整数
题目描述数组A包含了0到n的所有整数,但其中缺失了一个。对于这个问题,我们设定限制,使得一次操作无法取得数组number里某个整数的完整内容。唯一的可用操作是询问数组中第i个元素的二进制的第j位(最低位为第0位),该操作的时间复杂度为常数,请设计算法,在O(n)的时间内找到这个数。给定一个数组number,即所有剩下的数按从小到大排列的二进制各位的值,如A[0][1]表示剩下的原创 2016-04-23 21:00:31 · 1275 阅读 · 1 评论 -
奇偶位交换
题目描述请编写程序交换一个数的二进制的奇数位和偶数位。(使用越少的指令越好)给定一个int x,请返回交换后的数int。测试样例:10返回:5import java.util.*;public class Exchange { public int exchangeOddEven(int x) { // write code here原创 2016-04-22 10:59:43 · 274 阅读 · 0 评论 -
最短作业优先(SJF)
题目要求:给定一个任务请求时间和任务持续时间的列表,计算使用最短作业优先时算法的平均等待时间。测试样例:输入:[0, 2, 4, 5], [7, 4, 1, 4]输出:4.0输入:[0, 1, 3, 9], [2, 1, 7, 5]输出:0.5import java.util.ArrayList;import java.util.Collectio原创 2016-04-22 10:31:42 · 1577 阅读 · 0 评论 -
整数转化
题目描述编写一个函数,确定需要改变几个位,才能将整数A转变成整数B。给定两个整数int A,int B。请返回需要改变的数位个数。测试样例:10,5返回:4import java.util.*;public class Transform { public int calcCost(int A, int B) { // write cod原创 2016-04-22 10:19:03 · 312 阅读 · 0 评论 -
最接近的数
题目描述有一个正整数,请找出其二进制表示中1的个数相同、且大小最接近的那两个数。(一个略大,一个略小)给定正整数int x,请返回一个vector,代表所求的两个数(小的在前)。保证答案存在。测试样例:2返回:[1,4]import java.util.*;public class CloseNumber { public int[] getCloseN原创 2016-04-22 09:56:08 · 792 阅读 · 0 评论 -
二进制小数
题目描述有一个介于0和1之间的实数,类型为double,返回它的二进制表示。如果该数字无法精确地用32位以内的二进制表示,返回“Error”。给定一个double num,表示0到1的实数,请返回一个string,代表该数的二进制表示或者“Error”。测试样例:0.625返回:0.101import java.util.*;public class Bin原创 2016-04-18 18:45:05 · 387 阅读 · 0 评论 -
猫狗收容所
题目描述 有家动物收容所只收留猫和狗,但有特殊的收养规则,收养人有两种收养方式,第一种为直接收养所有动物中最早进入收容所的,第二种为选择收养的动物类型(猫或狗),并收养该种动物中最早进入收容所的。 给定一个操作序列int[][2] ope(C++中为vector>)代表所有事件。若第一个元素为1,则代表有动物进入收容所,第二个元素为动物的编号,正数代表原创 2016-04-18 16:42:01 · 503 阅读 · 0 评论 -
双栈排序
题目描述请编写一个程序,按升序对栈进行排序(即最大元素位于栈顶),要求最多只能使用一个额外的栈存放临时数据,但不得将元素复制到别的数据结构中。给定一个int[] numbers(C++中为vector<int>),其中第一个元素为栈顶,请返回排序后的栈。请注意这是一个栈,意味着排序过程中你只能访问到第一个元素。测试样例:[1,2,3,4,5]返回:[5,4,3,原创 2016-04-17 20:44:52 · 335 阅读 · 0 评论 -
基本字符串压缩
题目描述利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能。比如,字符串“aabcccccaaa”经压缩会变成“a2b1c5a3”。若压缩后的字符串没有变短,则返回原先的字符串。给定一个string iniString为待压缩的串(长度小于等于3000),保证串内字符均由大小写英文字母组成,返回一个string,为所求的压缩后或未变化的串。测试样例"aabc原创 2016-04-09 20:37:28 · 320 阅读 · 0 评论 -
机器人走方格II
题目描述有一个XxY的网格,一个机器人只能走格点且只能向右或向下走,要从左上角走到右下角。请设计一个算法,计算机器人有多少种走法。注意这次的网格中有些障碍点是不能走的。给定一个int[][] map(C++ 中为vector >),表示网格图,若map[i][j]为1则说明该点不是障碍点,否则则为障碍。另外给定int x,int y,表示网格的大小。请返回机器人从(0,0)走到原创 2016-04-25 20:51:55 · 697 阅读 · 0 评论 -
高度最小的BST
题目描述对于一个元素各不相同且按升序排列的有序序列,请编写一个算法,创建一棵高度最小的二叉查找树。给定一个有序序列int[] vals,请返回创建的二叉查找树的高度。import java.util.*;public class MinimalBST { public int buildMinimalBST(int[] vals) { //原创 2016-03-24 19:26:42 · 232 阅读 · 0 评论 -
输出单层结点
题目描述对于一棵二叉树,请设计一个算法,创建含有某一深度上所有结点的链表。给定二叉树的根结点指针TreeNode* root,以及链表上结点的深度,请返回一个链表ListNode,代表该深度上所有结点的值,请按树上从左往右的顺序链接,保证深度不超过树的高度,树上结点的值为非负整数且不超过100000。import java.util.*;/*public clas原创 2016-03-24 19:07:54 · 256 阅读 · 0 评论 -
有向路径检查
题目描述对于一个有向图,请实现一个算法,找出两点之间是否存在一条路径。给定图中的两个结点的指针UndirectedGraphNode* a,UndirectedGraphNode* b(请不要在意数据类型,图是有向图),请返回一个bool,代表两点之间是否存在一条路径(a到b或b到a)。import java.util.*;/*public class Undir原创 2016-03-23 20:43:05 · 622 阅读 · 0 评论 -
二叉树平衡检查
/*题目描述实现一个函数,检查二叉树是否平衡,平衡的定义如下,对于树中的任意一个结点,其两颗子树的高度差不超过1。给定指向树根结点的指针TreeNode* root,请返回一个bool,代表这棵树是否平衡*/import java.util.*;/*public class TreeNode { int val = 0; TreeNode left = null;原创 2016-03-23 19:42:09 · 222 阅读 · 0 评论 -
LUCKY STRING
题目描述A string s is LUCKY if and only if the number of different characters in s is a fibonacci number. Given a string consisting of only lower case letters , output all its lucky non-empty substrin原创 2016-04-05 10:29:25 · 532 阅读 · 0 评论 -
最大子序列、最长递增子序列、最长公共子串、最长公共子序列、字符串编辑距离
最大子序列最大子序列是要找出由数组成的一维数组中和最大的连续子序列。比如{5,-3,4,2}的最大子序列就是 {5,-3,4,2},它的和是8,达到最大;而 {5,-6,4,2}的最大子序列是{4,2},它的和是6。你已经看出来了,找最大子序列的方法很简单,只要前i项的和还没有小于0那么子序列就一直向后扩展,否则丢弃之前的子序列开始新的子序列,同时我们要记下各个子序列的和,最后找到和最大的转载 2016-04-04 11:11:27 · 356 阅读 · 0 评论 -
蛇形填数
输入:3输出:1 2 38 9 47 6 5#include#includeusing namespace std;int A[1000][1000];int main(){ int N; cin>>N; int p=1; int total = N*N; int x = 0; int y = 0; memset(A, 0, sizeof(A)); A[原创 2016-04-04 10:16:59 · 212 阅读 · 0 评论 -
二叉树中和为某一值的路径
题目描述输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。import java.util.ArrayList;/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right原创 2016-03-30 22:19:54 · 232 阅读 · 0 评论 -
模式匹配算法KMP详解
http://kb.cnblogs.com/page/176818/转载 2015-09-21 20:57:41 · 526 阅读 · 0 评论 -
快速排序(C++实现)
#include#include#includeusing namespace std;void printArr(int arr[], int len);void quickSort(int arr[], int left, int right);int partion(int arr[], int left, int right);int main(){ int arr[] =原创 2016-04-07 13:42:55 · 249 阅读 · 0 评论 -
机器人走方格I
题目描述有一个XxY的网格,一个机器人只能走格点且只能向右或向下走,要从左上角走到右下角。请设计一个算法,计算机器人有多少种走法。给定两个正整数int x,int y,请返回机器人的走法数目。保证x+y小于等于12。测试样例:2,2返回:2import java.util.*;public class Robot { public int countWa原创 2016-04-25 20:20:43 · 385 阅读 · 0 评论 -
碰撞的蚂蚁
题目描述在n个顶点的多边形上有n只蚂蚁,这些蚂蚁同时开始沿着多边形的边爬行,请求出这些蚂蚁相撞的概率。(这里的相撞是指存在任意两只蚂蚁会相撞)给定一个int n(3测试样例:3返回:0.75import java.util.*;public class Ants { public double antsCollision(int n) {原创 2016-04-25 19:48:27 · 467 阅读 · 0 评论 -
希尔排序(Shell Sort)
public void shellSort(int[] arr){ int len = arr.length; int i = 0; int j = 0; for(int h=len/2; h>0; h/=2){ for(i=h; i<len; ++i){ int tmp = arr[i]; for(j=i-h; j>=0; j-=h){原创 2016-04-12 21:51:58 · 229 阅读 · 0 评论 -
上楼梯
题目描述有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶、3阶。请实现一个方法,计算小孩有多少种上楼的方式。为了防止溢出,请将结果Mod 1000000007给定一个正整数int n,请返回一个数,代表上楼的方式数。保证n小于等于100000。测试样例:1返回:1import java.util.*;public class GoUpstai原创 2016-04-12 18:54:17 · 439 阅读 · 0 评论 -
翻转子串
题目描述假定我们都知道非常高效的算法来检查一个单词是否为其他字符串的子串。请将这个算法编写成一个函数,给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成,要求只能调用一次检查子串的函数。给定两个字符串s1,s2,请返回bool值代表s2是否由s1旋转而成。字符串中字符为英文字母和空格,区分大小写,字符串长度小于等于1000。测试样例:"Hello world原创 2016-04-12 18:25:42 · 252 阅读 · 0 评论 -
二叉查找树中寻找下一个节点
题目描述请设计一个算法,寻找二叉查找树(牛客网上的“寻找下一个节点”那道题中说的是二叉树,注意区别)中指定结点的下一个结点(即中序遍历的后继)。给定树的根结点指针TreeNode* root和结点的值int p,请返回值为p的结点的后继结点的值。保证结点的值大于等于零小于等于100000且没有重复值,若不存在后继返回-1。import java.util.*;/*publ原创 2016-03-26 21:54:36 · 781 阅读 · 0 评论 -
单项链表反转
public class ReverseList { public static void main(String[] args) { // TODO Auto-generated method stub ReverseList rlist = new ReverseList(); Node1 root = new Node1(); Node1 t = root; t原创 2016-04-07 21:25:49 · 241 阅读 · 0 评论 -
hihoCoder #1039 : 字符消除
时间限制:1000ms单点时限:1000ms内存限制:256MB描述小Hi最近在玩一个字符消除游戏。给定一个只包含大写字母"ABC"的字符串s,消除过程是如下进行的:1)如果s包含长度超过1的由相同字母组成的子串,那么这些子串会被同时消除,余下的子串拼成新的字符串。例如"ABCCBCCCAA"中"CC","CCC"和"AA"会被同时消除,余下"A原创 2016-04-07 21:21:15 · 321 阅读 · 0 评论 -
面试常用排序算法
public class SortAlgorithm { public static void main(String[] args) { // TODO Auto-generated method stub SortAlgorithm sa = new SortAlgorithm(); // int[] arr = {4,7,2,4,3,9,0,10}; int[] arr原创 2017-05-04 18:58:24 · 496 阅读 · 0 评论