algorithm
文章平均质量分 60
leewon1988
这个作者很懒,什么都没留下…
展开
-
最长非重复字串
/*given a string, find the length of the longest substring without repeating characters. * For example, the longest substring without repeating letters for "abcabcbb" is "abc", * which the length i原创 2013-10-06 21:31:50 · 524 阅读 · 0 评论 -
判断一个序列是不是另外一个序列的栈的pop序列
/**题目:输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序。为了简单起见,我们假设push序列的任意两个整数都是不相等的。 比如输入的push序列是1、2、3、4、5,那么4、5、3、2、1就有可能是一个pop系列。因为可以有如下的push和pop序列:push 1,push 2,push 3,push 4,pop,push 5,p原创 2013-09-10 21:44:22 · 701 阅读 · 0 评论 -
图的邻接表实现以及targan算法
/*点类*/#ifndef NODE_H__#define NODE_H__#include "arc.h"#include #include struct node{ std::string node_name; std::shared_ptr arc; node() { node_name.clear(); arc.reset(); } node(con原创 2013-09-10 19:58:28 · 845 阅读 · 0 评论 -
strcmp和strcpy
char* strcpy(char* dst, char* src, size_t len){ char* d=dst; while((--len)&&(*dst++=*src++)); //方向不可互换 *dst='\0'; return d;}int strcmp(char* src,char* sub){ while((*src)==(*sub++)) if((*sr原创 2013-09-03 20:12:34 · 516 阅读 · 0 评论 -
台阶问题
/**题目:一个台阶总共有n级,如果一次可以跳1级,也可以跳2级。求总共有多少总跳法,并分析算法的时间复杂度。**/#include #include unsigned long long stage(size_t n){ if(n==1 || n==2) return n; unsigned long long a1=1; unsigned long long a2原创 2013-09-10 20:17:04 · 537 阅读 · 0 评论 -
约瑟夫环问题
/**题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。当一个数字删除后,从被删除数字的下一个继续删除第m个数字。求出在这个圆圈中剩下的最后一个数字。**/#include #include //循环队列法void joseph_with_queue(int n,int k)原创 2013-09-09 19:19:17 · 568 阅读 · 0 评论 -
求已排序数组中和为某个数的两个数
/**题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。**/#include void solve(int* arr,int size,int val){ i原创 2013-09-09 15:29:02 · 629 阅读 · 0 评论 -
atoi
/**题目:输入一个表示整数的字符串,把该字符串转换成整数并输出。例如输入字符串"345",则输出整数345。**/#include #include #include int atoi(char* src,size_t size){ if(src==NULL || size==0) throw std::exception("parameter error!"); i原创 2013-09-09 22:06:51 · 613 阅读 · 0 评论 -
求的数组的topN
/**查找最小的k个元素题目:输入n个整数,输出其中最小的k个。例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4**/#include #include #include //swapvoid swap(int& left,int& right){ int tem=left; left=right; right=tem;}//sh原创 2013-09-09 14:50:53 · 1183 阅读 · 0 评论 -
最大子串和
/**输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。**/#include #include #include int原创 2013-09-09 13:51:18 · 525 阅读 · 0 评论 -
满足min.push.pop操作时间复杂度为o(1)的栈
/**设计一个栈结构,满足一下条件:min,push,pop操作的时间复杂度为O(1)。*/#include #include #include class stack{public: stack(int max_size) { this->max_size=max_size; this->cur_size=0; this->cur_min=std::numeri原创 2013-09-08 22:48:16 · 984 阅读 · 0 评论 -
二叉树中查找和为某个数的所有路径
/*题目:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。例如 输入整数22和如下二元树 10 / \ 5 12 / \ 4 7则打印出两条路径:10, 12和10, 5, 7。*/#include #include #include struct btree原创 2013-09-09 14:09:08 · 735 阅读 · 0 评论 -
二叉树搜索树转双链表
/*1.把二元查找树转变成排序的双向链表 题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。 10 / \ 6 14 / \ / \4 8 12 16 转换成双向链表4=6=8=10=12=14=16*/#include struct btree_node{ int val;原创 2013-09-09 13:38:04 · 642 阅读 · 0 评论 -
数组中和为N的组合
/**现有整型数组y{1,2,4,3,5,8},写出一个函数,找出所有和为10的集合**/#include #include #include void print(std::vector& vec){ if(!vec.empty()) { std::for_each(vec.begin(),vec.end(),[](const int& val) { std:原创 2013-10-04 15:23:10 · 2620 阅读 · 0 评论 -
Same tree
/*Given two binary trees, write a function to check if they are equal or not.Two binary trees are considered equal if they are structurally identical and the nodes have the same value.*/#include原创 2013-10-05 15:42:57 · 556 阅读 · 0 评论 -
锯齿状层次化输出二叉树
/*given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to right, then right to left for the next level and alternate between).For example:Given binary t原创 2013-10-07 23:33:04 · 707 阅读 · 0 评论 -
字符串解析出所有ip地址
/*given a string containing only digits, restore it by returning all possible valid IP address combinations.For example:Given "25525511135",return ["255.255.11.135", "255.255.111.35"]. (Order does原创 2013-10-07 17:05:18 · 1765 阅读 · 0 评论 -
二叉树层次遍历
/*given a binary Tree Level Order Traversal AC Rate: 950/3041 My SubmissionsGiven a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).For原创 2013-10-07 15:08:41 · 590 阅读 · 0 评论 -
最长连续序列(O(n),C++版)
/*given an unsorted array of integers, find the length of the longest consecutive elements sequence.For example, Given [100, 4, 200, 1, 3, 2], The longest consecutive elements sequence is [1, 2, 3原创 2013-10-06 13:35:42 · 1015 阅读 · 0 评论 -
最长连续序列(O(n)算法)
原文出处:点击打开链接/***************************************************************************** * File: LongestRange.java * Author: Keith Schwarz (htiek@cs.stanford.edu) * * An algorithm for finding t转载 2013-10-06 12:51:29 · 794 阅读 · 0 评论 -
带有随机指针的链表拷贝
#include #include struct RandomListNode{ int label; RandomListNode *next,*random; RandomListNode(int x):label(x),next(NULL),random(NULL) { }};class Solution{public: RandomListNode* copy原创 2013-10-06 16:08:59 · 801 阅读 · 0 评论 -
aoti重新写
/*implement atoi to convert a string to an integer.Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input ca原创 2013-10-05 23:02:35 · 667 阅读 · 0 评论 -
相似字符串(字符串编辑)最短距离(非递归版本)
第一次写的递归版本:点击打开链接,速度太慢了,基本case都超时,重新写一个非递归的/*given two words word1 and word2, find the minimum number of steps required to convert word1 to word2. (each operation is counted as 1 step.) You have th原创 2013-10-07 13:59:19 · 579 阅读 · 0 评论 -
最长回文子串
/*given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.*/#include #include原创 2013-10-06 21:11:29 · 546 阅读 · 0 评论 -
括号的有效性
/*Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.The brackets must close in the correct order, "()" and "()[]{}" are all valid原创 2013-10-06 12:27:45 · 618 阅读 · 0 评论 -
反转整数
/*reverse digits of an integer.Example1: x = 123, return 321Example2: x = -123, return -321click to show spoilers.Have you thought about this?Here are some good questions to ask before coding.原创 2013-10-05 23:17:02 · 632 阅读 · 0 评论 -
矩阵最短路径
/*ven a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers along its path.Note: You can only move either down or right at a原创 2013-10-05 15:44:10 · 797 阅读 · 0 评论 -
百度--包含所有珠子的最小串
/**一串首尾相连的珠子(m个),有N种颜色(N<=10),设计一个算法,取出其中一段,要求包含所有N中颜色,并使长度最短。并分析时间复杂度与空间复杂度。*/#include #include #include #include class state{public: state(std::string str) { this->str=str; sum=0;原创 2013-09-08 17:49:22 · 638 阅读 · 0 评论 -
上交硕士上机题
/*1 2 3 4 5 67 8 9 0 说某移动电信运营商开发了一个名为“争霸”的游戏,为鼓励用户参与,凡签约用户均可获得前三位为888的手机号码,但这样的话就有10的8次方种可能,现在给出一种限制条件减少号码数量,就是两个相邻号码之间的关系必须满足象棋里的“将步”即:给你前三位都是888 后面8位是上面的数字 每个数的相邻只有有限个数字比如8881*原创 2013-09-08 16:56:07 · 608 阅读 · 0 评论 -
腾讯-字符串匹配
讨论帖地址:点击打开链接/*假设两个字符串中所含有的字符和个数都相同我们就叫这两个字符串匹配, 比如:abcda和adabc,由于出现的字符个数都是相同,只是顺序不同, 所以这两个字符串是匹配的。要求高效!*/#include #include bool match_string(char* left,char* right,int n){ if(left==NULL || r原创 2013-09-08 15:42:32 · 523 阅读 · 0 评论 -
编程之美---超级水王扩展题目
/** * 一个数组中有N个数字出现的次数都超过数组总长度L的1/(N+1),查找这些ID * */#include #include #include #include #include using namespace std;//数组:arr//长度:size//数字个数:nmap find(int* arr,int size,size_t n){ map ca原创 2013-08-25 15:11:06 · 1062 阅读 · 0 评论 -
查找数组中某个出现次数超过数组长度一半的数字
/** * 数组中某个数字存在个数为数组总个数的一半以上,求这个数 * */#include using namespace std;templateT find(T* arr,int size){ int c_index; int times=0; for(int i=0;i<size;++i) { if(times==0) { c_index=i;原创 2013-08-25 14:33:02 · 585 阅读 · 0 评论 -
卡特兰数
/** * 组合公式 * */#include using namespace std;//阶乘公式unsigned long long factorial(unsigned int n){ if(n==0 || n==1) return 1; return n*factorial(n-1);}//排列公式P(n,r)=n!/r!unsigned long long p原创 2013-08-25 14:14:12 · 494 阅读 · 0 评论 -
括号序列暴力破解
/** *给定N个括号,求匹配排列方式 **/#include #include #include using namespace std;const int left_bracket=1;const int right_bracket=-1;class Matching_Bracket{public: Matching_Bracket() :cur_state(0原创 2013-08-23 17:08:06 · 645 阅读 · 0 评论 -
Catalan数计算及应用
问题描述:卡塔兰数,是组合数学中一个常出现在各种计数问题中出现的数列。输入一个整数n,计算h(n)。其递归式如下:h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)h(0) (其中n>=2,h(0) = h(1) = 1) 该递推关系的解为:h(n)=C(2n,n)/(n+1) (n=1,2,3,...) 思路:直接根据递归转载 2013-08-24 22:37:21 · 675 阅读 · 0 评论 -
最长递减子序列
/** * 求一个数组的最长递减子序列 *输入:9,4,3,2,5,4,3,2 *输出:9,5,4,3,2 **/#include #include #include using namespace std;struct state{ int index_pre; //存储当前值的前一个值的位置 int length; //存储到当前位置的长度 state() :i原创 2013-08-23 20:56:16 · 689 阅读 · 0 评论 -
编程之美课后题:求得两个正整数A和B的二进制表示有多少位不同
#include int count_different_bits(const unsigned int& a, const unsigned int& b){ unsigned int c=a^b; int count=0; while(c) { c&=(c-1); ++count; } return count;}int main(int argc,char原创 2013-08-22 09:33:06 · 933 阅读 · 0 评论 -
编程之美--最短摘要
其中借鉴了网上的滑动窗口思想,效率比编程之美高!#include #include #include #include #include #include class current_abstract{public: current_abstract(const std::vector& key_words) :is_contained(false) { std:原创 2013-08-21 16:01:17 · 638 阅读 · 0 评论 -
两个单链表,存在交点,求交点
/** *两个单链表有交点,用尽量高的效率查找到第一个交点 */#include struct node{ node* next;};int get_length(node* head){ int sum=0; while(head) { ++sum; head=head->next; } return sum;}node* find_common_原创 2013-08-21 16:19:55 · 635 阅读 · 0 评论 -
编程之美-字符串距离
/** *两个字符串,通过删除/添加/修改变为相同的字符串的最少操作 *字符串距离就是:操作+1 *字符串的相似度为(1/操作+1) * */#include #include using namespace std;using namespace std::chrono;int get_distance(char* left,int l_begin,int l_end, //原创 2013-08-20 16:01:45 · 671 阅读 · 0 评论