写在前面
最近想复习一下数据结构与算法相关的内容,找一些题来做一做。如有更好思路,欢迎指正。
一、场景描述
给定一个有序数组,该数组中的元素有正有负,请找出绝对值最小的数。
示例:[-5, -3, -1, 0, 2, 4],返回 0
这多简单呢,循环数组,一一比较,比出最小的不就完了嘛?
先取出-5,绝对值为5;取出-3,绝对值为3,5比3大,取3… 取0;0和2比,取0;0和4比,取0。
不对呀! 到0之后,正数的就不用比了,那负数的呢?
二、具体步骤
1.环境说明
名称 | 说明 |
---|---|
IntelliJ IDEA | 2019.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];
}
}
写在后面
如果本文内容对您有价值或者有启发的话,欢迎点赞、关注、评论和转发。您的反馈和陪伴将促进我们共同进步和成长。