旋转数组中的元素查找
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了旋转数组中的元素查找相关的知识,希望对你有一定的参考价值。
参考技术A 题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小元素为1。题目:在旋转数组中搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。假定数组中没有重复元素。
参考 https://leetcode-cn.com/problems/search-in-rotated-sorted-array/solution/ji-bai-liao-9983de-javayong-hu-by-reedfan/
取区间的中间值mid后:
题目:在旋转数组中搜索一个给定的目标值,如果数组中存在这个目标值,则返回true,否则返回false。数组中可能存在重复元素。
思路基本同上题,只是要考虑到[1,0,1,1,1] 和 [1,1,1,0,1]的情况:
旋转数组最小值二分查找法
输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
# -*- coding:utf-8 -*-
class Solution:
def minNumberInRotateArray(self, rotateArray):
# write code here
#利用二分查找法查找时,若right < middle ,则意味着右侧数据违背了元素递增的规律,即最小值一定在Middle往后的数据中,left = mid +1
#若right > middle,则意味着middle之后的数据是递增规律,则最小值一定在middle的前面,即right = middle-1
if not rotateArray:
return 0
l = len(rotateArray)
left = 0
right = l-1
while left <= right:
mid =(left + right)>>1
if rotateArray[mid-1]>rotateArray[mid]:
return rotateArray[mid]
elif rotateArray[mid] > rotateArray[right]:
left = mid +1
else:
right = mid -1
return 0
以上是关于旋转数组中的元素查找的主要内容,如果未能解决你的问题,请参考以下文章
寻找旋转排序数组中的最小值 II(数组二分查找)打印1000以内的所有素数,并从键盘输入一个正整数,判断是否为素数数组元素统计(算法初阶基础知识)