有序数组循环右移n位后,寻找最小值,数组中可能包含重复元素-0430

发布时间:2021-09-21 00:18:14

#思路:,
# 原来有序的数组,右移n位后,以最小值与最大值的临界位置划分,两段各还是有序的。7,8,9,1,2,3,4,5,6
#对于有序的查找,思想是有二分查找。但这是局部有序,所以稍微变点型。


###方法2: 此只是要找最小值(其实找到最小值就是分界点位置了)。
#用二分的思想,可以发现,当middle#当middle>end,这无序的肯定在右侧了。此时可以确定将结果缩小到nums[middle+1 : end]这个范围内。将end返回即为第一个最小值了
# 而当nums[middle]==nums[right]nums[middle]==nums[right]时,无法确定最小值的位置,此时可以做的事情是尽量缩小范围,又因为知道nums[middle]和nums[right]值相同,
# 所以nums[right]可以抛弃,即将结果范围缩小到nums[left : right-1]重新计算(注意,目的是找最小值而不是第一个最小值的位置,
# 所以就算nums[right]是第一个最小值也无关紧要).
###方法2 更好!



class solution:
? ? def findMin(a):
? ? ? ? length=len(a)
? ? ? ? start=0
? ? ? ? end=length-1
? ? ? ? while(start? ? ? ? ? ? middle=(start+end)//2
? ? ? ? ? ? if a[middle]? ? ? ? ? ? ? ? end=middle
? ? ? ? ? ? elif a[middle]>a[end]:
? ? ? ? ? ? ? ? start=middle+1
? ? ? ? return a[start]
? ? ? ? ?
? ? s=[7,8,9,10,11,12,13,14,1,2,3,4,5,6]
? ? mins=findMin(s)
? ? print(mins)



?



### 方法1,先查找到分界点位置,利用二分查找。如果中间值小于start处的值,则分界点在左侧;大于右侧的值,则分解点在右侧。
# 用一个全局变量保留上一个middel值,继续在含分界点处的一侧遍历。当新的middle满足 start#找到中间分界值后,对两个有序遍历各进行二分搜索
?

相关文档

  • 2020年幼儿园后勤年终总结
  • “洋芋”的“灾难”
  • 我的世界怎么把地精抓回家
  • 担保公司2019销售工作计划
  • 形容日落的句子
  • 蚂蚁金服面经分享:spring+jvm+并发编程等(已拿offer)
  • 黑加仑葡萄干功效 孕妇吃黑加仑好吗
  • 苹果手机发票有什么信息
  • 屏蔽html后退功能
  • 汉武帝不仅需要建功立业的董仲舒、汲黯、卫青,也需要能让他整天快乐的东方朔...
  • 最佳损友吉他弹唱教学简谱
  • 女人的嘴型看面相怎么样_尖嘴猴腮的女人面相
  • 憨态可掬造句
  • Jenkins部署Golang(centOS)
  • 优美的芒种祝福语合集43句
  • 祝福父亲大寿的贺词
  • 苹果8可以升级iOS13.5.1吗
  • 七步学习法 ?? 如何高效学习一项技能
  • 给贫困小孩的一封信
  • 华为手机读不出内存卡
  • 上古十大魔神 蚩尤第一当之无愧
  • 切花保鲜实验报告切花保鲜更久的8种简单的方法
  • 美丽的枫树林
  • 有效预防水肿的有哪些方法
  • 保存时间最长的食物
  • MS14-064 漏洞测试入侵win7
  • 浪漫经典爱情诗词名句有哪些
  • 阿里云服务器是如何计费的?有哪些计费方式
  • 对父母表达爱600字作文
  • 初三政治的教学反思
  • 猜你喜欢

    电脑版