最近想复习一下数据结构与算法相关的内容,找一些题来做一做。如有更好思路,欢迎指正。
给定一个有序数组,该数组中的元素有正有负,请找出绝对值最小的数。
示例:{-5, -3, -1, 0, 2, 4},返回 0
这多简单呢,循环数组,一一比较,比出最小的不就完了嘛?
先取出-5,绝对值为5;取出-3,绝对值为3,5比3大,取3… 取0;0和2比,取0;0和4比,取0。
不对呀! 到0之后,正数的就不用比了,那负数的呢?
名称 | 说明 |
---|---|
IntelliJ IDEA | 2019.2 |
以下为Java版本实现:
public class ArraySortedFindAbsMin {
public static void main(String[] args) {
int[] array = {-5, -3, -1, 0, 2, 4};
int minAbs = findMinAbs(array);
System.out.println(minAbs);
}
/**
* 思路:
* 2个关键词,有序数组 + 绝对值最小
*
* 1.有序数组:常见的方法二分查找,可查大可查小
* 2.绝对值最小:意味着距离坐标原点最近
* 小于0的数,从小到大,绝对值是在变小
* 大于0的数,从小到大,绝对值是在变大
*
* @param array 有序数组
* @return
*/
private static int findMinAbs(int[] array) {
int i = 0;
while (array[i] < 0) {
i++;
}
if (array[i - 1] + array[i] <= 0) {
return array[i];
}
return array[i - 1];
}
}
如果本文内容对您有价值或者有启发的话,欢迎点赞、关注、评论和转发。您的反馈和陪伴将促进我们共同进步和成长。