12 2013 档案
摘要:题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。题目简单些,由于是排好序的,可以由两端出发,判断其和与指定数字的大小关系:大了则把较大的变小些,小了则把较小的变大些,相等则符合要求。 1 #include 2 void getTwo(int a[],int length,int sum){ 3 if(length sum) 6 ...
阅读全文
摘要:题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。链表结点定义如下:struct ListNode{ int m_nKey; ListNode* m_pNext;};题目不难,能快速想到解决的方法就是定义两个指针,第一个比第二个快k-1个节点。这样,当第一个到达尾节点时,第二个刚好停留在倒数第k个节点上。实现起来的话,就是先让第一个先next k-1个,然后两个再同步next。OKListNode* PrintNext_K(ListNode* L,int k){ if(!L||knext; if(!p1) ...
阅读全文
摘要:题目:求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。程序很简单,就看想到想不到了。悲剧,我属于后者。。。算法的关键就是利用&对变量进行引用,可以直接改变本体,还有就是&&的使用,充分发挥了它作用。即当前者不满足...
阅读全文
摘要:题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。例如输入“I am a student.”,则输出“student. a am I”。void Reverse(char* Begin,char* End){if(Begin > End) return ;char temp;While(Begin < End){ temp = *Begin; *Begin = *End; *End = temp; Begin++; End--;}}char* WordReverse(char* str){ cha.
阅读全文
浙公网安备 33010602011771号