求一个有序数组中绝对值最小的值

有一个已经排序的数组(升序),数组中可能有正数、负数或0,求数组中元素的绝对值最小的数,要求,不能用顺序比较的方法(复杂度需要小于O(n)),可以使用任何语言实现

例如,数组{-20,-13,-4, 6, 77,200} ,绝对值最小的是-4。

解一:

public int minValueOfAbs(int[] array) {

        int len = array.length;

        if (array[0] >= 0) {

            return array[0];

        } else if (array[len - 1] <= 0) {

            return array[len - 1];

        }

        int low = 0;

        int high = len - 1;

        while (low <= high) {

            int mid = (low + high) / 2;

            if (array[mid] > 0) {

                if (array[mid - 1] < 0) {

                    return Math.abs(array[mid]) > Math.abs(array[mid - 1]) ? array[mid - 1] : array[mid];

                }

                high = mid - 1;

            } else if (array[mid] < 0) {

                low = mid + 1;

            } else {

                return array[mid];

            }

        }

        return -1;

    }

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • <center>#1 Two Sum</center> link Description:Given an arr...
    铛铛铛clark阅读 6,716评论 0 3
  • /* (无序区,有序区)。从无序区通过交换找出最大元素放到有序区前端。 选择排序思路: 1. 比较相邻的元素。如果...
    刘帆_d384阅读 3,424评论 0 0
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 9,214评论 0 2
  • 首先总结以下Java和C、C++中的一般控制台输入方式,方便以后的编程题: java键盘输入 java读文件(会自...
    androidjp阅读 6,831评论 0 16
  • 长沙黄花国际机场,位于湖南长沙市长沙县黄花镇,所以叫黄花机场。距离长沙城区10几公里。 没到天河机场却到了黄花机场...
    付强_阅读 8,677评论 9 61

友情链接更多精彩内容