【数组】-找出有序数组中(有负有正)绝对值最小的数

写在前面

  最近想复习一下数据结构与算法相关的内容,找一些题来做一做。如有更好思路,欢迎指正。



一、场景描述

  给定一个有序数组,该数组中的元素有正有负,请找出绝对值最小的数。

示例:[-5, -3, -1, 0, 2, 4],返回 0

  这多简单呢,循环数组,一一比较,比出最小的不就完了嘛?
先取出-5,绝对值为5;取出-3,绝对值为3,5比3大,取3… 取0;0和2比,取0;0和4比,取0。
不对呀! 到0之后,正数的就不用比了,那负数的呢?


二、具体步骤

1.环境说明

名称说明
IntelliJ IDEA2019.2

2.代码

以下为Java版本实现:


public class ArraySortedFindAbsMin {

    public static void main(String[] args) {
//        int[] array = {-5, -3, -1, 0, 2, 4};
        int[] array = {-5, -3, -2, 1, 2, 4};
        int minAbs = findAbsMin(array);
        System.out.println(minAbs);
    }

    /**
     * 思路:
     * 约束条件:有序数组
     *
     * 绝对值最小:
     * 对于负数,从左到右,绝对值是在变小
     * 对于正数,从左到右,绝对值是在变大
     *
     * 那么,
     * 如果一个数小于0,那我应该一直从左到右,先找到绝对值最小的负数。
     * 然后,再和第一个正数去比结果
     *
     * @param array
     * @return
     */
    private static int findAbsMin(int[] array) {
        int i = 0;
        while (array[i] < 0) {
            i++;
        }

        // 等于0的含义,在于绝对值相同的2个数,此处返回正数
        if (array[i] + array[i - 1] <= 0) {
            return array[i];
        }

        return array[i - 1];
    }

}

写在后面

  如果本文内容对您有价值或者有启发的话,欢迎点赞、关注、评论和转发。您的反馈和陪伴将促进我们共同进步和成长。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值