- 博客(7)
- 收藏
- 关注
原创 二分查找注意点
二分查找的前提: 已序序列 正确算法: int binary_sort(int arr[], int length, int value) { if(arr == NULL || length == 0) return -1; int ret = -1; int left = 0; int right = length-1;
2013-05-28 17:02:44 706
原创 第17题:
在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b 如果从头遍历,与后面字符进行比较出现次数是否为1,算法复杂度为O(n^2), 考虑以空间换时间,因为一个字符占8位。因此可用一个256位数组保存每个字符出现的次数 char
2013-05-24 16:04:23 649
原创 第14题:
题目:输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字。 要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。 例如输入数组1、2、4、7、11、15 和数字15。由于4+11=15,因此输出4 和11。 思路: 2个指针,分别从两边向中间移动,相加找到退出。 void findtwonum
2013-05-21 16:30:16 538
原创 第13题: 题目:输入一个单向链表,输出该链表中倒数第k 个结点。链表的倒数第0 个结点为链表的尾指针。
链表结点定义如下: struct ListNode { int m_nKey; ListNode* m_pNext; }; 算法实现 ListNode* FindLastK(ListNode* head, int k){ ListNode* p1=head, *p2=head; int nNode=0; while(p1->m_pNext
2013-05-21 16:09:38 1209
原创 翻转句子中单词的顺序。
题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。 句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。 例如输入“I am a student.”,则输出“student. a am I” void reverseOrder(char pStr[], int begin, int end) { if(begin >= end)
2013-05-16 15:42:12 656
原创 选择排序 实现
插入排序基本原理: 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕 时间复杂度:n^2 稳定排序 算法实现 void SelectionSort(int arr[], int len) { for(int i=0; i<len-1; i++)
2013-05-16 12:07:45 521
原创 算法时间复杂度计算
定义: 算法中基本操作重复执行的次数是问题规模n的某个函数 计算循环次数k和循环变量之间的关系 具体步骤可以简化为: 1. 找到执行次数最多的语句 2. 计算语句执行次数的数量级 3. 用大O来表示结果 例1: int Sum1( int n ) { int p=1, sum=0, m ; for (m=1; m<=n; m++) {
2013-05-10 15:52:15 1038
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人