如何求绝对值最小的数
问题描述:
有一个已经排序的数组(升序),数组中可能有正数、负数或0,求数组中元素的绝对值最小的数,要求,不能用顺序比较的方法(复杂度需要小于O(n)),可以使用任何语言实现
例如,数组{-20,-13,-4, 6, 77,200} ,绝对值最小的是-4。
算法实现的基本思路:
找到负数和正数的分界点,如果正好是0就是它了,如果是正数,再和左面相邻的负数绝对值比较,如果是负数,取取绝对值与右面正数比较。还要考虑数组只有正数或负数的情况。
package JBArray;public class GetMinAbsoluteValue {/*** 三种情况: 1、有正负数 2、只有正数 3、只有负数* * 找到正负数临界点,比较绝对值大小即可*/private static int getMinAbsoluteValue(int[] a) {if (a == null) {return Integer.MIN_VALUE;}int len = a.length;if (len < 1) {return Integer.MIN_VALUE;}// 数组中没有负数if (a[0] > 0) {return a[0];}// 数组中没有正数if (a[len - 1] <= 0) {return a[len - 1];}// 数组中有正有负int mid = 0;int begin = 0;int end = len - 1;int absMin = 0;// 计算负数和正数分界点while (true) { mid = begin + (begin + end) / 2;// 计算当前的索引if (a[mid] == 0) { //如果值为0,就是绝对值最小的值return 0;} else if (a[mid] > 0) { //如果值大于0,在左半部分查找if (a[mid - 1] > 0) end = mid - 1; //移一位大于0,结束下标变为mid-1else if (a[mid - 1] == 0)return 0; //移一位等于0,就是绝对值最小的值elsebreak; //没找到} else { //如果值小于0,在右半部分查找if (a[mid + 1] < 0)begin = mid + 1;else if (a[mid + 1] == 0)return 0;elsebreak;}}// 获取正负数分界点处绝对值最小的值if (a[mid] > 0) {if (a[mid] < Math.abs(a[mid - 1])) //大于0,和前面的一个数比较absMin = a[mid];elseabsMin = a[mid - 1];} else {if (a[mid] < Math.abs(a[mid + 1]))//小于0,和后面的一个数比较absMin = a[mid];elseabsMin = a[mid + 1];}return absMin;}public static void main(String[] args) {int[] a1 = { -10, -5, -2, 7, 15, 50 };int[] a2 = { 2, 4, 6, 7, 8 };int[] a3 = { -13, -9, -6, -4, -3 };int value = getMinAbsoluteValue(a1);System.out.println(value);int value1 = getMinAbsoluteValue(a2);System.out.println(value1);int value2 = getMinAbsoluteValue(a3);System.out.println(value2);}}
如何求绝对值最小的数相关推荐
- Java学习手册:(数据结构与算法-数组)如何求绝对值最小的数?
问题: 有一个升序排列的数组,数组中可能有正数.负数或0,求数组中元素的绝对值最小的数,例如,数组{-10,-5,-2,7,15,50},绝对值最小的是2. 方法一: 对于升序数组,求绝对值最小的数可 ...
- 面试题: 求绝对值最小的数
题目: 有⼀个已经排好序的整数序列(升序,⽆重复项),序列中可能有正整数.负整数或者0,请 ⽤你认为最优的⽅法求序列中绝对值最⼩的数.**_要求不能使⽤顺序⽐较的⽅法(时间复杂 度需要⼩于 O(n) ...
- javascript:求绝对值最小的数
问题来源:http://androidguy.blog.51cto.com/974126/1129543 有一个已经排序的数组(升序),数组中可能有正数.负数或0,求数组中元素的绝对值最小的数,要求, ...
- 如何求数组中绝对值最小的数?
""" 有一个升序排列的数组,数组中可能有正数,负数或0,求数组中元素的绝对值最小的数.例如,数组[-10,-5,-2,7,15,50],该数组中绝对值最小的数是2 &q ...
- JSK-399 绝对值最小的数【大数】
绝对值最小的数 输入 10 个数,找出其中绝对值最小的数,将它和最后一个数交换. 输入格式 输入一行包括 10 个绝对值不超过 1000 的整数. 输出格式 输出 10 个交换后的整数,答案输出在一行 ...
- 找出有序数组中绝对值最小的数
假设数组是从小到大排序,数值可能为负数.0.正数. 思路一 可以一次性遍历一遍,找出绝对值最小值,此时时间复杂度为O(N),缺点是没有利用数组是有序的这一特点. int getMinAbs(int[] ...
- 【面试】求最大最小的数
一.代码 package DR6;import java.util.Scanner;class EX10 {/*** @param args*/public static void main(Stri ...
- c语言中用if语句计算两数之差的绝对值,用位运算实现求绝对值-有效避开if-else判断...
用位运算实现求绝对值-有效避开if-else判断 By SmartPtr(http://www.cppblog.com/SmartPtr/) 一般情况下,如果要我们写一个求绝对值的函数,我们的实现很有 ...
- JS前端算法:乱序整数序列两数之和绝对值最小
// 乱序整数序列两数之和绝对值最小 function sortAbs(arr) {let tmp = arr.sort((a, b) => a - b); // 先排序,感觉也可以不排序if ...
- CSDN挑战编程——《绝对值最小》
绝对值最小 题目详情: 给你一个数组A[n],请你计算出ans=min(|A[i]+A[j]|)(0<=i,j<n). 例如:A={1, 4, -3}, 则: |A[0] + A[0]| ...
最新文章
- FileReader对象和FormData对象
- Entity Framework中的Migrations
- Hasor【付诸实践 01】低代码框架 DataQL 聚合查询引擎 SQL执行器报错 Query dialect missing 原因分析及解决(针对GreenPlum数据库)
- Python—进程、线程、协程
- MyBatis-Plus——增删查改
- 链表最小结构(C++版本)
- 实用干货!大数据入门的常用技术栈全在这里了
- 模块ntdll中出现异常eaccessviolation_SAP ERP软件中的物料凭证 MIGO
- cad墙线打断lisp_CAD墙体如何打断,用tr命令不行,打散的话墙线会错位?
- hexo+next主题美化
- “游匣”冲击暑期档——戴尔为中国用户定制笔记本电脑
- 自己动手写代码生成器
- Linux命令:readelf
- org.springframework.hateoas.config.HateoasConfiguration required a single bean, but 15 were found:
- 基于重心距离识别的蠓虫分类模型(唯一能看的只有代码)
- NAVICAT 还原mssql bak备份文件
- 关于RoboMaster2019新型能量机关的一些感想(大风车)
- WKWebView、Safari、SFSafariViewController的区别与选取
- 基于51单片机的DS1302涓流充电计时芯片详细学习(时钟制作)
- c语言编程小练习-九九乘法表
热门文章
- (八)高德地图之添加marker标记点
- omv安装mysql插件_Openmediavault第三方插件安装教程
- cp:略过目录:”文件名“
- 包包各部位名称图解_七大箱包主要部位的结构专业术语和特性
- 一、数据库之理论基础
- 深信服python开发工程师面试经验,深信服软件工程师面试经验
- python预测你的小孩身高_儿童身高预测方法
- python的分隔符_python分隔符
- Mysql优化-02
- 计算机心理学测试题目及答案解析,测量心理学考研重点选择题(含答案)