二分法查找指定数字:

非递归版

def BinarySearch(nums,target):left,right=0,len(nums)-1#注意这里一定要是"<="while(left<=right):middle=left+(right-left)//2if nums[middle]==target:return middle#注意这里left和right的更新elif nums[middle]<target:left=middle+1else:right=middle-1return -1
nums=[1,2,3,4,5,6,7,8,9]
target=1
print (BinarySearch(nums,target))

递归版

def binary_search(alist, item):if len(alist) == 0:return Falseelse:midpoint = len(alist)//2if alist[midpoint]==item:return Trueelse:if item<alist[midpoint]:return binary_search(alist[:midpoint],item)else:return binary_search(alist[midpoint+1:],item)testlist = [0, 1, 2, 8, 13, 17, 19, 32, 42,]
print(binary_search(testlist, 3))
print(binary_search(testlist, 13))

二分法查找有序数组中绝对值最小的数:

1.中间数恰为0,返回

2.中间数>0,说明绝对值最小的数字在左边;否则在右边。

3.最后的两个数其中之一就是绝对值最小的数。

另一种思路和上边类似,但显冗余:

左边第一个数字大于零,绝对值最小就是左边第一个数;数列最右边的数字小于零,绝对值最小的数的数就是右一。否则进入上边方法的第三第三种情况。

下面代码实现第一种:

def findMinAbs(nums):left,right=0,len(nums)-1while(left<right):mid=left+(right-left)//2if nums[mid]==0:return nums[mid]#注意这里对left和right的更新方式,因为不确定mid是不是绝对值最小的#所以不能用mid+1和mid-1来更新left和rightelif nums[mid]>0:right=midelse:left=midif (right-left==1):return nums[left] if abs(nums[left])<abs(nums[right]) else nums[right]
nums1=[-9,-8,-7,-6,-2,0,1,2,3,4,5]
nums2=[2,3,4,5,6,7]
nums3=[-9,-8,-7,-6,-2]
nums4=[-9,-8,-7,-6,-2,3,4,5]
nums5=[-9,-8,-7,-6,3,4,5]
print(findMinAbs(nums1))
print(findMinAbs(nums2))
print(findMinAbs(nums3))
print(findMinAbs(nums4))
print(findMinAbs(nums5))

LT.852二分法查找指定数字,绝对值最小的数相关推荐

  1. 【C++】二分法查找某个数字在数组中的下标

    #include<iostream> using namespace std;//利用二分法查找某个数字在数组中的下标 int search(int arr[], int k, int s ...

  2. 查找指定数字在数组中出现的位置(有几次打印几次)

    定义一个方法,查找指定数字在数组中出现的位置(若出现多次,多次打印) 如: 数组[1232]要查找的数是2 则方法内部会打印索引值 1 ,3 数组[1232] 要查找的数是5 则方法每部会打印 &qu ...

  3. Java学习手册:(数据结构与算法-数组)如何求绝对值最小的数?

    问题: 有一个升序排列的数组,数组中可能有正数.负数或0,求数组中元素的绝对值最小的数,例如,数组{-10,-5,-2,7,15,50},绝对值最小的是2. 方法一: 对于升序数组,求绝对值最小的数可 ...

  4. javascript:求绝对值最小的数

    问题来源:http://androidguy.blog.51cto.com/974126/1129543 有一个已经排序的数组(升序),数组中可能有正数.负数或0,求数组中元素的绝对值最小的数,要求, ...

  5. 面试题: 求绝对值最小的数

    题目: 有⼀个已经排好序的整数序列(升序,⽆重复项),序列中可能有正整数.负整数或者0,请 ⽤你认为最优的⽅法求序列中绝对值最⼩的数.**_要求不能使⽤顺序⽐较的⽅法(时间复杂 度需要⼩于 O(n) ...

  6. JSK-399 绝对值最小的数【大数】

    绝对值最小的数 输入 10 个数,找出其中绝对值最小的数,将它和最后一个数交换. 输入格式 输入一行包括 10 个绝对值不超过 1000 的整数. 输出格式 输出 10 个交换后的整数,答案输出在一行 ...

  7. 如何求数组中绝对值最小的数?

    """ 有一个升序排列的数组,数组中可能有正数,负数或0,求数组中元素的绝对值最小的数.例如,数组[-10,-5,-2,7,15,50],该数组中绝对值最小的数是2 &q ...

  8. C语言实现二分法查找某个数字(超详细)

    一.题目要求 在一个有序数组中,查找某一个数字,如果能找到,则输出它的下标,如果找不到,输出该数字不存在. 二.解题思路 有一种简单的方法是遍历整个数组,但是这种方法的时间复杂度较高,且逼格不够高.所 ...

  9. 利用二分法查找 设计人与计算机猜数游戏,第8章第1-3.ppt

    第8章第1-3 思考题: 百元买百鸡问题.假定小鸡每只0.5元,公鸡每只2元,母鸡每只3元.现在有100元钱要求买100只鸡,列出所有可能的购鸡方案. 搜索的范围? 要满足的条件是什么? 请尝试写出伪 ...

  10. 找出有序数组中绝对值最小的数

    假设数组是从小到大排序,数值可能为负数.0.正数. 思路一 可以一次性遍历一遍,找出绝对值最小值,此时时间复杂度为O(N),缺点是没有利用数组是有序的这一特点. int getMinAbs(int[] ...

最新文章

  1. ffmpeg + opencv 把摄像头画面保存为mp4文件
  2. 吴恩达新书《Machine Learning Yearning》中7个实用建议(附论文)
  3. 通过gps给定的两个经纬度坐标,计算两点之间的距离
  4. 安装oracle sqldeveloper
  5. IAsyncResult异步设计
  6. adb常用命令的介绍及使用
  7. Linux 性能监测:介绍
  8. C#生成CHM文件(应用篇)之代码库编辑器(1)
  9. Python数据结构与算法笔记(六):数据结构——列表和栈
  10. Beginning WF 4.0翻译——第一章(创建一个简单的工作流)续二
  11. 今日尾号限行数据接口代码实现
  12. puk码怎么查询_手机PUK码怎么查询?使用PUK码解锁手机电话SIM/USIM卡的教程
  13. 《黑客与画家》-1 为什么书呆子不受欢迎?
  14. 随机生成10位数QQ号.c
  15. 计算机表格增加,电脑中给Excel表格添加水印效果的方法
  16. skinsdog 狗网支持马上直接取回CSGO饰品皮肤开箱网站
  17. CGAN之条件生成对抗网络(Matlab)
  18. Spring之JDBC
  19. 短视频平台-小说推文(知乎)推广任务详情
  20. SpringBoot进阶(一):再回首SpringBoot maven 项目的三种启动方式

热门文章

  1. python简单制作节日贺卡
  2. 查询用户活跃度表登录间隔30天的用户
  3. t检验的几种应用案例
  4. 【基础】Premultiplied Alpha Blending/Alpha预乘/透明图片黑边
  5. 卷积神经网络——Faster Rcnn中的anchor和Proposal
  6. 火狐 全屏_如何禁用Firefox的全屏警告消息
  7. 身高预测c语言代码switch,C++ ,预测身高程序
  8. 融创孙喆一:父辈的光环与阴影下,我反对扮演所谓的二代
  9. c罩杯尺码_B、C罩杯有多大?
  10. informix mysql 语法_Informix SQL 语法详解