- 博客(28)
- 资源 (3)
- 收藏
- 关注
原创 Xcode 添加第三方库
Xcode 调用通过 Homebrew 安装的第三方库,除了在 Build Settings -> Search Paths 下的 “Header Search Paths” 和 “Library Search Paths” 添加相应头文件和库文件路径外,Build Phases -> Link Binary With Libraries 也需要添加库文件。步骤如下:1、在工程中新建 New
2016-10-13 23:34:47 5366
原创 三元组最小距离
已知三个升序整数数组a[l], b[m]和c[n]。请在三个数组中各找一个元素,使得组成的三元组距离最小。三元组的距离定义是:假设a[i]、b[j]和c[k]是一个三元组,那么距离为:Distance = max(|a[i]–b[j]|,|a[i]–c[k]|,|b[j]–c[k]|)请设计一个求最小三元组距离的最优算法,并分析时间复杂度。关键公式:max(|a[i]–b[j]|,
2013-10-09 18:27:40 2207
原创 已知前序中序序列,求后序遍历序列
给出一棵二叉树的前序和中序遍历,输出后续遍历的结果。如前序:ABDHECFG,中序:HDBEAFCG,则输出后序为:HDEBFGCA思路:先根据前序和中序序列构建出二叉树,然后后序输出该二叉树struct Node{ char data; Node *left; Node *right;};Node *getBinaryTree(char *preOrder,
2013-10-08 19:51:34 1228
原创 绳子覆盖问题
百度笔试题:数轴上从左到右有n各点a[0],a[1],……,a[n -1],给定一根长度为L的绳子,求绳子最多能覆盖其中的几个点。
2013-10-06 00:09:27 1253
原创 Longest Palindromic Substring
给定一个字符串,求该字符串中最长的回文子串。如字符串“abcdcdgh”的最长回文子串为“bcdcb”有一个常见的错误解法:翻转给定的字符串,找出原字符串和翻转后的字符串的最长公共子串就是要找的最长回文子串。这种方法貌似可以,比如S="caba",S'=“abac”,那么S和S'的最长公共子串就是“aba”,也就是要找的最长回文子串,但是,假如S=“abacdfgdcaba”,S'=“abac
2013-10-04 19:48:35 863
原创 GetMemory
有如下代码,分析不妥之处:void GetMemory(char *p){ p = (char *)malloc(100);}void Test(){ char *str = NULL; GetMemory(str); strcpy(str, "Hello world"); printf("%s", str);}
2013-10-04 00:29:57 550
原创 指针与引用
指针——对于一个类型T,T*就是指向T的指针类型,也即一个T*类型的的变量能够保存一个T对象的地址。类型T是可以加一些限定词的,如const、volatile等。 char c = 'x'; char *p = &c; // p holds the address of c引用——应用是一个对象的别名,主要用于函数参数和返回值类型,符号X&表示X类型的引用。 int
2013-10-03 23:01:41 558
原创 进程和线程
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位;线程是进程中的一个执行单元,也是进程中的可调度实体。线程与进程的区别:地址空间:线程是进程内的一个执行单元,进程至少有一个线程,同一进程内的线程共享进程的地址空间。进程有自己独立的地址空间。资源拥有:进程是资源分配和拥有的单位,同一进程内的线程共享进程的资源。线程是处理器调度的基本单位
2013-10-03 00:02:30 765
原创 石头剪刀布游戏
设计一个石头剪刀布游戏,游戏双方为计算机和你参考代码如下:int main(){ char gesture[][10] = {"stone", "scissor", "cloth"}; int man, computer, result; srand(time(NULL)); while (1) { cout << "Input your gesture(0-sto
2013-09-20 20:54:55 823
原创 硬币正反的比例
题目:一堆硬币,一个机器人,如果是反的就翻正,如果是正的就抛掷一次,无穷多次后,求正反的比例。解析:假设某个阶段正面硬币的比例为p,则反面的比例为1-p,下一次翻转后,p的部分分为p/2的正面、p/2的反面,而1-p的反面部分全部变为正面。趋于平衡时,前后两次正反的比例应相等,即:p/(1-p)=(p/2+(1-p))/(p/2),得到p=2/3。更直接一点,翻转前后正面(反面)相等,即p
2013-09-19 22:09:13 2827
原创 最大子矩阵的和
一维数组的子序列的最大和有多种求法,其中动态规划求法复杂度最优。参考代码为:int maxSub(int a[], int n){ int i; int b = 0, sum = 0x80000000; for (i = 0; i < n; i++) { if (b > 0) b += a[i]; else b = a[i]; if (sum
2013-09-19 16:35:08 822
原创 KMP算法
void getNext(const char *T, int next[]){ int j = 0, k = -1; next[0] = -1; while (T[j] != '\0') { if (k == -1 || T[j] == T[k]) { j++; k++; if (T[j] != T[k]) { next[j] = k;
2013-09-18 02:09:29 586
原创 插入排序的简单实现
插入排序,选择无序区的第一个元素插入到有序区的合适位置。代码:void insertSort(int a[], int n){ int i, j, temp; for (i = 1; i < n; i++) { if (a[i] > a[i - 1]) { temp = a[i]; for (j = i - 1; j >= 0 && a[j] > tem
2013-09-16 13:29:41 491
原创 三色旗问题
由红白蓝三种颜色的旗帜乱序出现,现需要排成蓝、白、红的顺序。void func(char *pInput, int len){ int bflag = 0; int wflag = 0; int rflag = len - 1; while (wflag <= rflag) { if (pInput[wflag] == 'w') { wflag++; }
2013-09-16 00:26:06 859
原创 判断括号是否匹配的递归与非递归实现
递归:int bracket(char *p, int count){ if (*p == '\0') return count; else if (*p == '(') return bracket(p + 1, count + 1); else if (count > 0 && *p == ')') return bracket(p + 1, count - 1);
2013-09-16 00:22:26 1023
原创 编程之美: 1-N中“1”出现的次数
数学统计规律:/********************************************************************************* 给定一个十进制正整数 N,写下从 1 开始,到 N 的所有整数,** 然后数一下其中出现的所有“1”的个数。** 例如:** N= 2,写下 1,2。这样只出现了 1 个“1”。** N= 12,我们会写下
2013-09-11 19:45:54 737
原创 背包问题
采药辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。”如果你是辰辰
2013-09-08 20:58:03 535
原创 C/C++内存分配(再续)
1. 内存分配方式内存分配方式有三种:(1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。(2) 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。(3) 从堆上分配,亦称动态内
2013-09-03 23:06:41 655
原创 C/C++内存分配(续)
堆和栈的理论知识1. 申请方式栈(stack):系统自动分配。例如局部变量int a = 0; 系统自动为b在栈区分配空间堆(heap):需要程序员自己分配,并指定空间大小,在C中的malloc函数如 p1 = (char *)malloc(10);在C++中的new操作符如 p2 = new char[10];注意p1、p2本身是在栈中。2. 申请后系统的相应
2013-09-03 22:47:43 634
原创 C/C++内存分配
一、程序的内存分配由C/C++编译器编译的程序占用的内存分为以下几个部分:1. 栈(stack)——由编译器自动分配释放,存放函数参数、局部变量等。其操作方式类似数据结构中的栈2. 堆(heap)——一般由程序员分配和释放,如果程序员没有释放,在程序结束时可能由操作系统回收。其与数据结构中的堆是两回事,操作方式类似于链表3. 全局静态区——全局变量和静态变量的存储是放在一起的,初始
2013-09-03 21:48:21 655
原创 统计数组中各数字出现的次数
给定数组A,大小为n,数组元素为1到n的数字,不过有的数字出现了多次,有的数字没有出现。请给出算法和程序,统计出各数字出现的次数。要求O(n)的时间复杂度,O(1)的空间复杂度。
2013-08-28 19:38:20 3850
原创 选择排序
选择排序,将待排序数列分为有序区和无序区,然后依次从无序区中选择最小的元素放到有序区的后面。设数组为a[0, 1, ..., n-2, n-1],初始时,数组为无序,i=0;从a[i+1, ..., n-1]中选择最小的元素与a[i]交换,交换后,a[0, 1, ..., i]就是一个有序区i++后,重复第二步,直到i=n-1,完成排序代码实现如下void select
2013-08-28 10:21:14 555
原创 以指定原子操作实现加减乘法
题目:以计算机提供的如下原子操作,实现加、减、乘法。赋值操作:b=a;++a和a+1;for(){......}有限循环;操作数只能为0或者正整数;定义函数解答:加法操作int add(int a, int b){ int result = a; for (int i = 0; i < b; ++i) { ++result;
2013-08-28 09:56:25 1429 1
原创 It Says
The time to be greedy is when others are afraid, and the time to be afraid is when others are greedy.
2013-08-28 09:37:51 705
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人