旋转数组的最小数字(python)
题目描述
# -*- coding:utf-8 -*-
class Solution:
def minNumberInRotateArray(self, rotateArray):
#由于数组(Array)可以分为两个部分有序的子数组,在排序的数组中可以考虑利用二分查找法实现。
#用两个指针分别指向数组的第一个元素(low)和最后一个元素(high),
#接着可以找到数组中间的元素(mid = (low+high)/2),
#如果中间元素位于前面的递增子数组中,则arr[mid] >= arr[low],
#此时数组中最小的元素应该位于该中间元素的后面。我们可以用指针low指向该中间元素low = mid,缩小搜索范围。
#移动之后的第二个指针high仍然位于后面的递增子数组中。
#如果中间元素位于后面的递增子数组,那么arr[mid] <= arr[high],
#此时输出中最小的元素应该位于该中间元素的前面,我们可以用指针high指向该中间元素high = mid。
#low总是指向前面递增子数组的元素,而high总是指向后面递增子数组的元素。最终low指向前面子数组的最后一个元素,
#而high指向后面子数组的第一个元素,即它们会指向两个相邻的元素,而此时high指向的刚好是最小的元素,
# write code here
n = len(rotateArray)
if n == 0: #空数组,直接返回0
return 0
low = 0 #初始化元素长度
high = n - 1
#如果把第0个元素移到最后,即数组有序,返回第一个元素即可
if rotateArray[low] < rotateArray[high]:
return rotateArray[low]
else:
#两个指针最终会指向两个相邻的元素,第二个指针指向最小的元素
while (high - low) > 1:
mid = (low + high)/2
#如果中间元素位于前面的递增子数组中
if rotateArray[low] <= rotateArray[mid]:
low = mid
#如果中间元素位于后面的递增子数组中
elif rotateArray[mid] <= rotateArray[high]:
high = mid #当首元素等于尾元素等于中间值时,只能在这个区域顺序查找,如[1,1,1,0,0,0,1,1]。
elif rotateArray[low] == rotateArray[high] and rotateArray[low] == rotateArray[mid]:
for i in range(n):
if rotateArray[i] < rotateArray[0]:
result = rotateArray[i]
high = i
result = rotateArray[high]
return result
#include<iostream>
#include<vector>
using namespace std;
class Solution
{
public:
int minNumberInRotateArray(vector<int> rotateArray)
{
int size = rotateArray.size();
int i;
if (size == 0)
return 0;
if (size == 1)
return rotateArray[0];
for (i = 1; i<size; i++)
{
if (rotateArray[i]<rotateArray[i - 1])
return rotateArray[i];
}
return rotateArray[0];
}
};
int main()
{
vector<int>vec;
int a[1000];
int i = 0;
int x;
while (cin >> a[i])
{
x = cin.get();
if (x == '\n')
break;
vec.push_back(a[i]);
++i;
}
vector<int>result(Solution().minNumberInRotateArray(vec));
for (int j = 0; j < result.size(); j++){
cout << result[j]<<" ";
cout << endl;
}
system("pause");
return 0;
}
旋转数组的最小数字(python)的更多相关文章
- 剑指Offer面试题:7.旋转数组的最小数字
一.题目:旋转数组的最小数字 题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2 ...
- 旋转数组的最小数字(JAVA)
旋转数组的最小数字 题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2 ...
- 剑指offer【06】- 旋转数组的最小数字(java)
题目:旋转数组的最小数字 考点:查找和排序 题目描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4, ...
- 剑指offer编程题Java实现——面试题8旋转数组的最小数字
剑指offer面试题8:旋转数组的最小数字 题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1, ...
- 【Java】 剑指offer(10) 旋转数组的最小数字
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. ...
- 《剑指offer》第十一题(旋转数组的最小数字)
// 面试题:旋转数组的最小数字 // 题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. // 输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如数组 // {3, ...
- 《剑指offer》— JavaScript(6)旋转数组的最小数字
旋转数组的最小数字 题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2, ...
- 【C语言】求旋转数组的最小数字,输入一个递增排序的数组的一个旋转,输出其最小元素
//求旋转数组的最小数字,输入一个递增排序的数组的一个旋转,输出其最小元素 #include <stdio.h> #include <string.h> int find_mi ...
- 【剑指offer】面试题 11. 旋转数组的最小数字
面试题 11. 旋转数组的最小数字 题目描述 题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4, ...
随机推荐
- mycat测试
mycat 目前最流行的分布式数据库中间插件 mycat能满足数据的大量存储,并能提高查询性能:同样应用程序与数据库解耦,程序只需知道中间件的地址,无需知道底层数据库,数据分布存储,提高读写性能,也可 ...
- C# 申请非托管内存
方式一:使用 stackalloc 关键字 int* block = stackalloc int[100]; 注:此关键字仅在局部变量初始值设定项中有效. 以下代码导致编译器错误. int* blo ...
- NSMapTable
跟NSDictionary用法差不多,不过区别是NSMapTable可以设置内存选项,例如可以设置key跟value的内存属性(weak/strong),从而避免内存泄露. 例如这个+ weakToW ...
- SignalR快速入门
本篇是SignalR系列教程的第一篇,本篇内容介绍了如何创建SignalR应用,如何利用SignalR搭建简易的聊天室等,本篇内容参考自:http://www.asp.net/signalr/over ...
- 【379】pandas 说明
参考:Part 1 参考:Part 2
- [jQ/PHP]再谈使用JS数组储值的运用(提交PHP处理)
--------------------------------------------------------------------------------------------------- ...
- 创建DLL动态链接库——模块定义法(def)
DLL模块定义法(Module-Definition File,即DEF):在VS家族IDE中,根据提示新增.def文件,如下: LIBRARY 关键字; mytestDll 库名; DLL_ADD ...
- python基础学习 Day19 面向对象的三大特性之多态、封装 property的用法(1)
一.课前内容回顾 继承作用:提高代码的重用性(要继承父类的子类都实现相同的方法:抽象类.接口) 继承解释:当你开始编写两个类的时候,出现了重复的代码,通过继承来简化代码,把重复的代码放在父类中. 单继 ...
- border&background1
1.border-radius border-top-left-radius:10px; = border-top-left-radius:10px 10px; (水平10px 竖直10px 被正圆切 ...
- ADO.Net 数据库查询
数据库中的表: VS查询代码: using System; using System.Collections.Generic; using System.Linq; using System.Text ...