javascript:求绝对值最小的数
问题来源:http://androidguy.blog.51cto.com/974126/1129543
有一个已经排序的数组(升序),数组中可能有正数、负数或0,求数组中元素的绝对值最小的数,要求,不能用顺序比较的方法(复杂度需要小于O(n)),可以使用任何语言实现例如,数组{-20,-13,-4, 6, 77,200} ,绝对值最小的是-4。
问题分解:
第一步:二分法寻找改变符号的位置(0视为正数)
第二步:比较位置左右数字的绝对值大小,取较小的那一个
- <script language="javascript">
- var getBound = function(a,fr,to){
- //[fr,to]是候选位置区间,位置从0开始计数
- var b=fr,f=fr,t=to,s=true;
- var left=function(b){return a[b-1];};//获取该位置右边的数字,增加代码可读性
- var right=function(b){return a[b];};//获取该位置左边的数字,增加代码可读性
- if(a.length===0){
- return -1;//数组为空,返回-1
- }else{
- if(right(b)>=0){
- s=false;//初始化位置就是要找的位置
- }else{
- for(var i=1;i<=100 && s;i++){
- b=f+Math.ceil((t-f)/2);//找到中点
- if(right(b)===undefined||(left(b)<0 && right(b)>=0)){
- s=false;//中点就是要找的位置
- }else if(right(b)<0){
- f=b;//下次前进找中点
- }else{
- t=b;//下次后退找中点
- }
- }
- }
- return b;
- }
- };
- var getMinAbs = function(a){
- var b=getBound(a,0,a.length);//获取位置
- if(b>=0){
- if(b===0){
- return Math.abs(a[b]);//位置在最左边
- }else if(b===a.length){
- return Math.abs(a[b-1]);//位置在最右边
- }else{
- return (Math.abs(a[b])>Math.abs(a[b-1])?Math.abs(a[b-1]):Math.abs(a[b]));//位置在中间
- }
- }else{
- return false;
- }
- };
- //测试代码
- var myArray=[-20,-13,-4,0,0,0,6,77,200,201,202];
- alert("[" + myArray + "]: " + getMinAbs(myArray));
- var myArray=[];
- alert("[" + myArray + "]: " + getMinAbs(myArray));
- var myArray=[-1];
- alert("[" + myArray + "]: " + getMinAbs(myArray));
- var myArray=[1];
- alert("[" + myArray + "]: " + getMinAbs(myArray));
- var myArray=[0,0];
- alert("[" + myArray + "]: " + getMinAbs(myArray));
- var myArray=[-1,-1];
- alert("[" + myArray + "]: " + getMinAbs(myArray));
- </script>
以myArray=[-20,-13,-4,0,0,0,6,77,200,201,202]为例,测试弹出:
本文转自 hexiaini235 51CTO博客,原文链接:http://blog.51cto.com/idata/1131865,如需转载请自行联系原作者
javascript:求绝对值最小的数相关推荐
- Java学习手册:(数据结构与算法-数组)如何求绝对值最小的数?
问题: 有一个升序排列的数组,数组中可能有正数.负数或0,求数组中元素的绝对值最小的数,例如,数组{-10,-5,-2,7,15,50},绝对值最小的是2. 方法一: 对于升序数组,求绝对值最小的数可 ...
- 面试题: 求绝对值最小的数
题目: 有⼀个已经排好序的整数序列(升序,⽆重复项),序列中可能有正整数.负整数或者0,请 ⽤你认为最优的⽅法求序列中绝对值最⼩的数.**_要求不能使⽤顺序⽐较的⽅法(时间复杂 度需要⼩于 O(n) ...
- 如何求数组中绝对值最小的数?
""" 有一个升序排列的数组,数组中可能有正数,负数或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]| ...
最新文章
- mysql sql with_mysql5.7 查询sql 出错: with sql_mode=only_full_group_by
- 让服务器iis支持.apk文件下载的设置方法
- 《程序是怎样跑起来的》第一章
- Codeforces VK Cup 2015 A.And Yet Another Bracket Sequence(后缀数组+平衡树+字符串)
- 用户体验五要素_UX系列课(三):用户体验影响力金字塔及五大要素
- 一时冲动:“通往瓦尔哈拉之路的冒险”
- smb文件共享_使用SMB文件共享作为存储替代方案
- 【删库不跑路】—Linux系统自杀实验 rm -rf /* 及如何抢救和预防
- 高程数据处理_全国12.5米高程 DEM for WeServer 数据1.0
- qt 工具栏分隔符_带有分隔线和上下文工具栏的RecyclerView Android
- Mac下载配置aria2和baidudl
- abb变频器580系列改中文_ABB变频器ACS580系列
- xshell5安装包(百度云),官方免费版,不会强制更新,没有标签限制(2019-4-4)
- A8. 无人机编队飞行定位分析与讨论-大结局
- html表头和左侧固定js,固定表头jquery datatable的使用与定制
- 这 9 个 Java 开源项目 yyds
- 打开word文档提示文件未找到_Word格式转换大全!三分钟把100份Word文档转为PDF、PPT、JPG文件...
- 运行时 Entry name .... .. collided
- 资深程序员才能看懂的幽默时刻
- 104、二氧化碳气体灭火系统的灭火机理
热门文章
- 1DCNN 2DCNN LeNet5,VGGNet16使用tensorflow2.X实现
- 公平锁和非公平锁有什么区别
- jar包与war包部署的区别及jar包部署的一个路径访问问题
- 编程高手这样“长高”
- linux数据库awr报告,手动生成AWR报告
- android sdk插件开发教程,Android Studio Plugin 插件开发教程(二) —— 插件SDK中的常用对象介绍...
- 软件测试:V模型和W模型详解
- 【图像配准】光流场模型医学图像配准【含GUI Matlab源码 747期】
- 目标检测训练时候的不平衡问题
- FISCO BCOS中交易池及其优化策略