程序员面试精典100题
cyxHehui
这个作者很懒,什么都没留下…
展开
-
查找最小的k个元素
题目:输入n个整数,输出其中最小的k个。例如:输入1,2,3,4,5,6,7,8,则最小的4个数是1,2,3,4。分析:采取一般的排序算法,如快速排序,堆排序,归并排序,等,先将这n个整数进行排序,然后再取最小的k个。那么时间复杂度为nlgn。 我们可以从数组中取k个元素,建一个k个元素的最大堆,继续从数组里面取出元素,如果该元素大于堆中最大元素,那么舍弃,继续;如果小原创 2013-12-03 14:36:03 · 1031 阅读 · 0 评论 -
查找字符串中第一个只出现一次的字符
题目:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。析:可以用一种简单的hashTable结构来解决这一问题,以字符所对应的ASCII码值作为key,以该字符出现的次数作为value。遍历完字符串的,hashTable中便存储了所有字符出现的次数。然后,再依次查找字符串中字符出现的次数,返回次数等于1的即可。// 13_第一个只出现一次的字符.cpp原创 2013-12-03 19:19:45 · 909 阅读 · 0 评论 -
查找单链表的第k个结点
题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。链表结点定义如下:struct ListNode{ int m_nKey; ListNode* m_pNext;};解析:方案一:可以对单链表来个逆置,然后再取逆置后的单链表的第k个元素。但是这样,在逆置的过程中涉及到大量的插入和删除的工作,实为不佳的原创 2013-12-03 16:14:43 · 1426 阅读 · 0 评论 -
翻转字符串中单词的顺序
题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。例如输入“I am a student.”,则输出“student. a am I”。#include "stdafx.h"#include using namespace std;void Reverse(char *pBe原创 2013-12-03 15:17:38 · 1750 阅读 · 0 评论