ACM
文章平均质量分 84
d4shman
~
展开
-
【C语言学习笔记】字符串拼接的3种方法
昨天晚上和@buptpatriot讨论函数返回指针(malloc生成的)的问题,说道字符串拼接,做个总结。#include#include#includechar *join1(char *, char*);void join2(char *, char *);char *join3(char *, char*);int main(void) { char a[] =原创 2013-12-12 16:20:08 · 154732 阅读 · 6 评论 -
约瑟夫环之二(用递归的思想解决Josephus问题)
原来写过一篇关于约瑟夫问题的链表实现解法 ,刷九度题到http://ac.jobdu.com/problem.php?pid=1356 时,再次遇到这个问题,记下用递归思想解决约瑟夫问题的方法:初始情况: 0, 1, 2 ......n-2, n-1 (共n个人)第一个人(编号一定是(m-1)%n,设之为(k-1) ,读者可以分m=n的情况分别试下,就可以得出结论) 出列之后,剩下的n-1原创 2014-01-13 10:09:09 · 25512 阅读 · 12 评论 -
约瑟夫环
参考:http://zh.wikipedia.org/wiki/%E7%BA%A6%E7%91%9F%E5%A4%AB%E6%96%AF%E9%97%AE%E9%A2%98http://mathworld.wolfram.com/JosephusProblem.html原创 2013-09-11 12:55:01 · 3854 阅读 · 0 评论 -
0-1背包问题 | DP
背包问题描述:摘自百度百科http://baike.baidu.com/view/841810.htm有N件物品和一个容量为V的背包。第i件物品的重量是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的重量总和不超过背包容量,且价值总和最大。解决方法:动态规划,参考:http://www.cnblogs.com/justinzhang/archive/2012/04原创 2013-09-16 16:01:20 · 1102 阅读 · 0 评论 -
第一个只出现一次的字符
题目描述:在一个字符串(1输入:输入有多组数据每一组输入一个字符串。输出:输出第一个只出现一次的字符下标,没有只出现一次的字符则输出-1。样例输入:ABACCDEFFAA样例输出:1-1AC代码:#include#include int main() { int i; ch原创 2014-01-07 18:30:16 · 901 阅读 · 2 评论 -
把数组排成最小的数
题目描述:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。输入:输入可能包含多个测试样例。对于每个测试案例,输入的第一行为一个整数m (1输入的第二行包括m个正整数,其中每个正整数不超过10000000。输出原创 2014-01-07 17:37:29 · 828 阅读 · 0 评论 -
丑数
题目:我们把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第1500个丑数。分析:参考:http://zhedahht.blog.163.com/blog/static/2541117420094245366965/ 假设数组中已经有若干个丑数原创 2013-10-31 18:34:49 · 1101 阅读 · 1 评论 -
找出和为S的两个数字
题目:输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。如输入数组: 1,2,4,7,11,13,15要查找S:15则应该输出(2,13),而不是(4,11)方法一:两次循环,遍历法,时间复杂度O(n^2)function search2nums1($arr,$s) { $len = c原创 2013-10-25 16:14:52 · 1269 阅读 · 0 评论 -
最大子向量和(连续子数组的最大和)
题目描述:HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天JOBDU测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。你会不会被他忽悠原创 2014-01-07 11:55:57 · 1023 阅读 · 0 评论 -
迷宫问题|深度优先搜索&广度优先搜索
什么样的数据结构决定了什么样的方法。1.用栈实现深度优先搜索(DSF)[cpp] view plaincopy#include #define MAX_ROW 5 #define MAX_COL 5 struct point { int row, col; } stack[512];原创 2013-12-20 17:44:19 · 1370 阅读 · 0 评论 -
八皇后问题|递归|回溯
八皇后问题WIKI: http://zh.wikipedia.org/wiki/%E5%85%AB%E7%9A%87%E5%90%8E%E9%97%AE%E9%A2%98参考:1.剑指OFFER: http://zhedahht.blog.163.com/blog/static/2541117420114331616329/2. http://www.datagenetics.com/原创 2013-09-12 18:28:56 · 1190 阅读 · 0 评论 -
调整数组顺序使奇数位于偶数前面
原文地址:http://blog.csdn.net/sunnyyoona/article/details/16360149[cpp] view plaincopy#include #include int *number; void SortOddBeforeEven(int *n原创 2014-01-02 23:12:09 · 822 阅读 · 0 评论 -
和为S的连续正数序列
题目描述:小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!输入:输入有多原创 2014-01-15 12:03:02 · 1308 阅读 · 0 评论 -
从尾到头打印链表
题目描述:输入一个链表,从尾到头打印链表每个节点的值。输入:每个输入文件仅包含一组测试样例。每一组测试案例包含多行,每行一个大于0的整数,代表一个链表的节点。第一行是链表第一个节点的值,依次类推。当输入到-1时代表链表输入完毕。-1本身不属于链表。输出:对应每个测试案例,以从尾到头的顺序输出链表每个节点的值,每个值占一行。原创 2014-01-02 17:01:55 · 1914 阅读 · 0 评论 -
数组中出现次数超过一半的数字
题目描述:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。输入:每个测试案例包括2行:第一行输入一个整数n(1第二行输入n个整数,表示数组中的每个元素,这n个整数的范围是[1,1000000000]。输出:对应每个测试案例原创 2014-01-15 23:17:41 · 860 阅读 · 0 评论 -
一致性哈希算法及其在分布式系统中的应用
记得上个月面试,被问到了一致性hash的问题,张洋的这篇博客讲的很清楚。原文地址: http://blog.codinglabs.org/articles/consistent-hashing.html-----------摘要本文将会从实际应用场景出发,介绍一致性哈希算法(Consistent Hashing)及其在分布式系统中的应用。首先本文会描述一个在日常开发转载 2014-12-30 19:31:30 · 845 阅读 · 0 评论 -
反转链表
题目描述:输入一个链表,反转链表后,输出链表的所有元素。(hint : 请务必使用链表)输入:输入可能包含多个测试样例,输入以EOF结束。对于每个测试案例,输入的第一行为一个整数n(0输入的第二行包含n个整数t(0输出:对应每个测试案例,以此输出链表反转后的元素,如没有元素则输出NULL。样例输入:原创 2014-01-15 18:47:13 · 941 阅读 · 0 评论 -
计算路径a对于路径b的相对路径
<?php /** * 计算路径a对于路径b的相对路径 * @author wusuopubupt * @date 2013-08-01 * */$dira = '/a/b/c/d/e.php';//$dira = '/a/b/p.php';$dirb = '/a/b/f/e/g.php'; //explode directions$arr_dira = explode('/原创 2013-08-01 14:20:51 · 1881 阅读 · 0 评论 -
两个链表的第一个公共结点
题目描述:输入两个链表,找出它们的第一个公共结点。输入:输入可能包含多个测试样例。对于每个测试案例,输入的第一行为两个整数m和n(1接下来的两行,第一行为第一个链表的所有元素,中间用空格隔开。第二行为第二个链表的所有元素,中间用空格隔开。输出:对应每个测试案例,输出两个链表的第一个公共结点的值。如果两个链表没有公共结点原创 2014-01-17 17:33:31 · 1026 阅读 · 0 评论 -
合并两个排序的链表
题目描述:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。(hint: 请务必使用链表。)输入:输入可能包含多个测试样例,输入以EOF结束。对于每个测试案例,输入的第一行为两个整数n和m(0下面一行包括n个数t(1输出:对应每个测试案例,若有结果,输出相应的链表。否则,输出N原创 2014-01-16 17:46:38 · 1003 阅读 · 0 评论 -
替换空格
题目描述:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。输入:每个输入文件仅包含一组测试样例。对于每组测试案例,输入一行代表要处理的字符串。输出:对应每个测试案例,出经过处理后的字符串。样例输入:We A原创 2014-01-17 10:13:12 · 2771 阅读 · 0 评论 -
用两个栈实现队列
题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作。队列中的元素为int类型。原创 2014-01-17 15:17:58 · 4095 阅读 · 1 评论 -
打印1到最大的N位数
题目描述:给定一个数字N,打印从1到最大的N位数。输入:每个输入文件仅包含一组测试样例。对于每个测试案例,输入一个数字N(1输出:对应每个测试案例,依次打印从1到最大的N位数。样例输入:1样例输出:123456789解法一:借助数学函数做AC代码:#inc原创 2014-01-17 15:55:58 · 978 阅读 · 1 评论 -
左旋字符串
题目描述:汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!输入:多组测试数据,每个测试数据包含一个字符序列S和非负整数K。其中S的长度不超过1000。原创 2014-01-17 14:13:30 · 1679 阅读 · 0 评论 -
链表中倒数第k个结点
题目描述:输入一个链表,输出该链表中倒数第k个结点。(hint: 请务必使用链表。)输入:输入可能包含多个测试样例,输入以EOF结束。对于每个测试案例,输入的第一行为两个整数n和k(0输入的第二行包括n个数t(1输出:对应每个测试案例,若有结果,输出相应的查找结果。否则,输出NULL。样例输入:原创 2014-01-15 23:48:40 · 959 阅读 · 0 评论 -
不用+-×÷求两个整数的之和
题目描述:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。输入:输入可能包含多个测试样例。对于每个测试案例,输入为两个整数m和n(1输出:对应每个测试案例,输出m+n的值。样例输入:3 47 9样例输出:716解法一:利用位运算(^,&)原创 2014-01-03 17:57:07 · 1886 阅读 · 0 评论 -
数组中只出现一次的数字
题目描述:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。输入:每个测试案例包括两行:第一行包含一个整数n,表示数组大小。2第二行包含n个整数,表示数组元素,元素均为int。输出:对应每个测试案例,输出数组中只出现一次的两个数。输出的数字从小到大的顺序。样例输入:82 4 3 6 3 2 5 5样原创 2014-01-09 14:44:18 · 988 阅读 · 0 评论 -
跳台阶问题|斐波那契|递归
题目:一个台阶总共有n级,如果一次可以跳1级,也可以跳2级。求总共有多少总跳法首先,从前往后看:f(1) = 1;f(2) = 2;f(3) = f(1) +f(2);然后,从后往前看:f(n) = f(n-1) + f(n-2);最后,得出结论:<?phpfunction step($n) { if($n == 1 || $n == 2) re原创 2013-09-13 12:01:51 · 1291 阅读 · 0 评论 -
找最小数
题目描述:第一行输入一个数n,1 输入:输入有多组数据。每组输入n,然后输入n个整数对。输出:输出最小的整数对。样例输入:5 3 3 2 2 5 5 2 1 3 6样例输出:2 1来源:2010年北京邮电大学计算机研究生机试真题AC代码:内存:920Kb,原创 2014-01-02 11:33:45 · 812 阅读 · 0 评论 -
二叉搜索树
二叉搜索树的动态操作(搜索,插入,删除)的复杂度等于树高,h=O(log n).php实现:<?php/** * @author:wusuopubupt * @date :2013-10-08 * @language: php * Binary Search Tree */$nums = array(6,3,9,5,1,7,2,8,4);$node = make原创 2013-10-09 10:32:15 · 701 阅读 · 0 评论 -
求二叉树中节点的最大距离 | 递归
题目:求二叉树中节点的最大距离分析:距离最远的两点必然在以某个节点A为根的子树上,它们间的路径必然经过该子树的根节点A。因此,原问题等同于“计算每个节点的左子树和右子树的高度和,取最大值”参考:http://www.cppblog.com/flyinghearts/archive/2010/08/16/123543.htmlphp实现:<?php/** * @author:原创 2013-10-25 12:22:12 · 1307 阅读 · 0 评论 -
求二进制数中1的个数 | hamming_weight
题目:对于一个字节的无符号整型变量,求其二进制表示中1的个数。解法1:位操作法(这里又细分成2中方法,详见代码)<?php $num = 6;$count = 0;while($num) { $num = $num & ($num - 1); $count++;}/* another method: while($num) { if(($num & 1)原创 2013-10-24 18:15:17 · 4222 阅读 · 3 评论 -
最大子数组问题 | DP
题目:http://ac.jobdu.com/problem.php?pid=1372解法:1.穷举法:即求x[0..n-1]中x[i...j]的之和的最大值,使用最普通的方法计算出任何x[i,j]之间各个和的最大值,然后取最大值。经过两次循环,实际复杂度:O(n^2);2.分治法:将原始向量x分为两个大小近似相等的子向量a和b,然后递归地找出a,b中元素总和最大的子向原创 2013-10-16 19:17:21 · 1528 阅读 · 0 评论 -
计算器 | 逆波兰表达式
1.实现原理:说明:在我原来做的逆波兰计算前中,postfix是用来表示逆波兰表达式的。但是和buptpatroit讨论后,想直接实现,下面是直接实现的方法:扫描输入序列1) 如果是数字,则存入栈 postfix 中;2) 如果是运算符: 2.1)是 ‘(’ ,则存入栈 stack 中; 2.2)是‘+’,‘-’,‘*’,‘/’,则检查栈stac原创 2013-09-27 18:30:54 · 3618 阅读 · 3 评论 -
数论 | 找出1-100的全部素数
素数的定义:指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数。1和0既非素数也非合数。质数是与合数相对立的两个概念,二者构成了数论当中最基础的定义之一。<?phpdefine('MAX', 100);for($n = 2; $n < MAX; $n++){ if($prime = prime($n)) { var_dump($prime原创 2013-09-28 14:01:21 · 1450 阅读 · 0 评论 -
在O(n^2)内寻找矩阵A中 A(c,d) - A(a,b) 的最大值, c > a 且 d > b.
参考:http://www.careercup.com/question?id=5818131813498880原创 2013-10-10 00:43:28 · 2081 阅读 · 2 评论 -
二分查找的递归与非递归实现
二分查找用于对已经排序的数组进行查找1.非递归方法:function binarySearchTraversal($arr,$n) { $start = 0; $end = count($arr) - 1; while($start <= $end) { $mid = intval(($start + $end) / 2); if($n == $arr[$mid]) {原创 2013-10-09 16:17:35 · 891 阅读 · 0 评论 -
Catalan 数
维基百科: 卡塔兰数,英文名Catalan number,是组合数学中一个常出现在各种计数问题中出现的数列。由以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名,其前几项为 : 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 1原创 2013-10-09 14:36:52 · 1334 阅读 · 4 评论 -
参加最多招聘会问题|贪心算法
题目:http://ac.jobdu.com/problem.php?pid=1463又到毕业季,很多大公司来学校招聘,招聘会分散在不同时间段,小明想知道自己最多能完整的参加多少个招聘会(参加一个招聘会的时候不能中断或离开)。php解法:<?php$start = array(10,9,8);$end = array(12,10,15);greedy_searc原创 2013-09-17 14:48:18 · 1534 阅读 · 0 评论 -
递归与迭代
1.Fibonacci 递归<?php $n = $_GET['n'];function fac($n) { if($n == 0 || $n == 1) { return $n; } if($n>1) { return (fac($n-1) + fac($n-2)); } }echo $fac = fac($n);?>2原创 2013-08-01 10:13:37 · 1291 阅读 · 0 评论