6.旋转数组的最小数字
2016-04-28 22:01
387 查看
旋转数组的最小数字
参与人数:6033时间限制:1秒空间限制:32768K
本题知识点: 查找
算法知识视频讲解
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减序列的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
很简单的一道题,不明白牛客网用了说明测试用例,就是通不过。我把自己在VS下写好的代码粘贴出来。这道题有一个隐含的考点,即出现数字相同的情况,而且必须在这种情况的处理代码写出来才能通过。
参与人数:6033时间限制:1秒空间限制:32768K
本题知识点: 查找
算法知识视频讲解
题目描述
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减序列的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。很简单的一道题,不明白牛客网用了说明测试用例,就是通不过。我把自己在VS下写好的代码粘贴出来。这道题有一个隐含的考点,即出现数字相同的情况,而且必须在这种情况的处理代码写出来才能通过。
#include "stdafx.h" #include <vector> using namespace::std; class Solution { public: int minNumberInRotateArray(vector<int> arr) { if (arr.size() == 0) return 0; int head = 0; int tail = arr.size() - 1; int mid = (head + tail) / 2; while (arr[head] >= arr[tail]) { if (tail - head == 1) { return arr[tail]; } if (arr[head] == arr[mid] && arr[mid] == arr[tail]) { int result = arr[head]; for (int i = head + 1; i <= tail; i++) { result = arr[i] < result ? arr[i] : result; } return result; } if (arr[head] <= arr[mid]) head = mid; else tail = mid; mid = (head + tail) / 2; } return arr[head]; } }; int _tmain(int argc, _TCHAR* argv[]) { vector<int> vec; vec.push_back(1); vec.push_back(0); vec.push_back(1); vec.push_back(1); vec.push_back(1); Solution s; int test = s.minNumberInRotateArray(vec); return 0; }
相关文章推荐
- splay旋转模板
- STM32之USART串口接收数据处理
- Linux内核中的 struct class 简介
- 第一冲刺阶段工作总结08
- 个人冲刺03
- const学习
- 87-代码的加密与解密
- 86-中间代码opcode的执行
- linux Makefile总结
- 剑指offer(50):计算1+2+...+n
- R中根据匹配原则将一列拆分为几列的方法
- maven 学习---部署基于Maven的war文件到Tomcat
- 0428数字口袋精灵app优化
- Math app 2.0
- hiho 53 连通性二·边的双连通分量
- (io)数据流的简单总结
- Codeforces 669E Little Artem and Time Machine (离散化树状数组)
- iOS开发总结之UILabel常用属性
- 85-虚拟机的语法分析
- 冲刺——第三天