[面试题] 用最快的方法找到唯一一个不连续成对出现的字母
来源:互联网 发布:淘宝男士皮鞋哪家好 编辑:程序博客网 时间:2024/06/06 13:19
面试题:除了某一个字母以外,其他字母都是连续成对出现的,比方说“AABBCCDDEFFGGHH”,用最快的方法找到其中的“E”。
思路:最快的方法肯定不是顺序遍历整个字符串,因为那样做的时间复杂度是O(n)。仔细观察这个字符串,实际上是很有规律的,前面正常成对出现的字母存在这样一个规律——偶数下标的字母必然与它的下一个字母相同,后半部分正常出现的字母也存在一个规律——奇数下标的字母必然和它的下一个字母相同。根据这些规律,我们可以采用二分法每次缩小一半的搜索范围,因此时间复杂度是O(log(n))。
代码:
char GetSingleChar(const string& input){ int start = 0, end = input.size() - 1; while (start < end) { int middle = (start + end) >> 1; if ((input[middle - 1] != input[middle]) && (input[middle + 1] != input[middle])) { return input[middle]; } if (middle & 1) { if (input[middle - 1] == input[middle]) { start = middle + 1; } else { end = middle - 1; } } else { if (input[middle] == input[middle + 1]) { start = middle + 2; } else { end = middle - 2; } } } return input[end];}
阅读全文
0 0
- [面试题] 用最快的方法找到唯一一个不连续成对出现的字母
- 一道简单的String面试题-找出非连续成对出现的一个字母(临界情况)
- 找到不重复字母在一个字符串第一次出现的索引 三种方法
- Oracle procedure递归方法生成有规律唯一不重复且连续的流水号(处理字母数字)
- 微软面试题 寻找数组中出现的唯一重复的一个数
- 微软面试题 寻找数组中出现的唯一重复的一个数
- 一道迅雷面试题:求出一个字符串中每个字母出现的次数
- 一道迅雷面试题:求出一个字符串中每个字母出现的次数
- 【面试题】给定一个仅包含字母和数字(0-9)的字符串,要求找到最长递增的数字串
- 找出一个数组中唯一没有成对出现的两个数
- 面试题——找出1000个连续数中出现的一个重复数
- 面试题:求一个字符串中连续出现次数最多的子串
- 【C语言】在两个数成对出现的数组中找到一个单独的数。
- java面试题:输出字符串每个字母出现的次数
- 17. 微软面试题:用最快的方法计算出 Fibonacci数列中的第n项
- 笔试面试成对出现的一组数,只有一个或两个只出现一次的数字,找到它们。
- 数据结构面试题总结5——数组:找出数组中唯一一个出现一次的元素
- 多线程中出现的一个面试题
- RecyclerView多条源数据却只显示一条
- Kaggle入侵物种检测VGG16示例——基于Keras
- iOS常见问题归纳与解答
- Android 自定义View之仿华为圆形加载进度条
- Spring MVC之@RequestParam @RequestBody @RequestHeader 等详解
- [面试题] 用最快的方法找到唯一一个不连续成对出现的字母
- casperjs(一),比phantomjs更有戏的爬虫工具
- HTML5 主体结构元素
- 二分图的判断--染色
- 下载pyvisa
- js年月日时分秒的获取
- hdfs集群的HA
- 一个人的旅行 HDU
- Hadoop常用shell命令