俊介三

一天更新一点,一天积累一点

导航

2013年4月1日

摘要: 题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是 O(n) ,空间复杂度是 O(1) 。思路:这是个比较新颖的题,经典的题是“给一个数组里面只有一个数字出现一次,其余的数都出现两次,把这个唯一的数找出来”,利用OXR操作的特性很容易把它找出来。即,抑或操作,相同为0,不同为1(0 ^ x) == x(x ^ x) == 0本题思路:抑或所有数,得到的是要找的数num1 num2的抑或值。由于这两个数是不相等的,那么这个抑或值一定不为0,就找到为1的位是那个,把原数组根据这个位分成两组。每组抑或得到的值即为所求的两个不同的数。代码 阅读全文

posted @ 2013-04-01 15:05 俊介三在前进 阅读(214) 评论(0) 推荐(0)

摘要: 一个数组是由一个递减数列左移若干位形成的,比如 {4 , 3 , 2 , 1 , 6 , 5}是由 {6 , 5 , 4 , 3 , 2 , 1} 左移两位形成的,在这种数组中查找某一个数。思路:二分查找,用if语句来进行“加强条件限制”(相当于中学时候分段讨论的思想),把具有单调性的一半讨论出来,如果不在此单调性段内,则在复杂的else中找去。知道找到或最后找不到为止。代码:#include <stdio.h>int helper(int* arr, int key, int start, int end);//return the index of the element if 阅读全文

posted @ 2013-04-01 13:46 俊介三在前进 阅读(830) 评论(0) 推荐(0)

摘要: 问题描述:卡塔兰数,是组合数学中一个常出现在各种计数问题中出现的数列。输入一个整数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,...)思路:直接根据递归式,写出相应的算法。代码: //函数功能: 计算Catalan的第n项 //函数参数: n为项数 //返回值: 第n个Catalan数 int Catalan(int n) { ... 阅读全文

posted @ 2013-04-01 12:11 俊介三在前进 阅读(1772) 评论(1) 推荐(0)