题目:

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

度需要⼩于 O(n) ),不能使⽤内置查找函数, _** 可以⽤任何语⾔实现。 输⼊:⼀个有序的
整数序列。 输出:绝对值最⼩的数

思路:

序列有三种情况:

1.所有的值小于等于0:

绝对值最小的数为序列最右边的数, 如:[-3,-2,-1]

2.所有值大于0:

绝对值最小的数为序列最左边的数, 如:[1,2,3]

3. 序列中既包含负数又包含正数

绝对值最小的数为负数和正数交接处的 负数或正数, 如 [-3,-2,1,2,3]

这种情况,先用二分查找,查找出正负数交接的索引,然后比较正负数交接处两个数组的绝对值即可。

代码:

go:

func main() {fmt.Println(minAbs([]int{-3, -2, -1}))fmt.Println(minAbs([]int{1, 2, 3}))fmt.Println(minAbs([]int{-6, -3, -2, -1, 8}))
}func minAbs(s []int) int {//所有的值小于等于0, 绝对值最小的为最右边的元素,如[-3,-2,-1]if s[len(s)-1] <= 0 {return s[len(s)-1]}//所有值大于等于0,绝对值最小的为最左边的元素,如[0,1,2,3]if s[0] >= 0 {return s[0]}//二分查找,找出正负数交接start := 0end := len(s) - 1for {middle := (start + end) / 2if s[middle] == 0 {return 0} else if s[middle] > 0 {if s[middle-1] < 0 {if abs(s[middle]) < abs(s[middle-1]) {return s[middle]}return s[middle-1]} else {end = middle - 1}} else {if s[middle+1] > 0 {if abs(s[middle]) < abs(s[middle+1]) {return s[middle]}return s[middle+1]} else {start = middle}}}
}func abs(i int) int {if i < 0 {return -i}return i
}

面试题: 求绝对值最小的数相关推荐

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

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

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

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

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

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

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

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

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

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

  6. 【面试】求最大最小的数

    一.代码 package DR6;import java.util.Scanner;class EX10 {/*** @param args*/public static void main(Stri ...

  7. 历届试题 核桃的数量(3个数的最小公倍数),翻硬币(贪心),买不到的数目(在范围内暴力,找范围,最小公倍数是上界,最小的数是下界),兰顿蚂蚁(dfs,模拟)

    历届试题 核桃的数量 问题描述 小张是软件项目经理,他带领3个开发组.工期紧,今天都在加班呢.为鼓舞士气,小张打算给每个组发一袋核桃(据传言能补脑).他的要求是: 各组的核桃数量必须相同 各组内必须能 ...

  8. (笔试题)将数组分成两组,使两组的和的差的绝对值最小

    题目: 数组中的数分为两组,给出一个算法,使得两个组的和的差的绝对值最小数组中的数的取值范围是0<x<100,元素个数也是大于0,小于100 比如a[]={2,4,5,6,7},得出的两组 ...

  9. 面试题45. 把数组排成最小的数

    题目: 面试题45. 把数组排成最小的数 题解: 1. 题解一: 2. 题解二: * 解题思路:* 先将整型数组转换成String数组,然后将String数组排序,最后将排好序的字符串数组拼接出来.关 ...

最新文章

  1. cv2.threshholding()简单阈值、自适应阈值,Octus阈值
  2. lua创建文件和文件夹
  3. python迷宫万花筒代码_利用广度优先遍历搜索迷宫的python源代码
  4. [云炬创业基础笔记] 第四章测试15
  5. Java培训分享void的用法和意义
  6. mysql 存储过程调用权限消失的问题,恢复权限
  7. JavaScript 图片滑动切换效果
  8. Python 列表 list 数组 array
  9. jQuery修改alert ,confirm的样式
  10. Snabbdom(虚拟dom-6-createElm函数)
  11. 求众数leetcode(169)+投票算法
  12. servlet 与 tomcat版本不匹配的问题
  13. ibm watson_IBM Watson Assistant与Web聊天的集成
  14. 一本通————1244 和为给定数
  15. 重视论文降重,应对论文查重
  16. 五款免费的磁盘空间使用情况报告软件
  17. Citrix 桌面云 XenApp_XenDesktop_7.15 部署系列(三)AD/DNS安装
  18. nginx设置 页面 301 跳转
  19. 彩色扁平化营销策划PPT模板-优页文档
  20. php+mysql实现分页:上一页,下一页

热门文章

  1. CST中建立石墨烯材料
  2. doraemon的python 集合
  3. 数字图像的一阶微分和二阶微分
  4. TOJ 3498.Differences
  5. 如何使用Google Analytics自定义转化事件跟踪电话和邮件事件?
  6. 2020年汽车芯片行业深度报告-1
  7. akka-typed(0) - typed-actor, typed messages
  8. 2021天梯赛 L1-078 吉老师的回归 题解
  9. oracle调用apps,oracleEBS 调用 SHELL 的方法
  10. 《安全周报》2011年7月第3期