在升序数组中:求绝对值最小的数:思路分三步,需要注意边界:len = length-1,参数数组个数为空,为1的条件等;

package com.interview.datastructure;

import java.util.Arrays;

public class MinAbsoluteValue {
public static void main(String[] args) {
    int array[] = {-3, -2, -1, 1, 7, 9, 11};
    int min = Min(array);
    System.out.println(min);

}

public static int Min(int array[]) {
    int len = array.length - 1;
    //全部都是大于0的
    if (array[0] >= 0) {
        return array[0];
    }
    //全部都是小于0的
    else if (array[len - 1] <= 0) {
        return array[len - 1];
    }
    //数组中是有大于0也有小于0的 需要先找到正数与负数交界的地方
    else {
        int mid = 0;
        while (mid < len - 1) {
            mid = mid + (len - mid) / 2;
            if (array[mid] == 0) {
                return array[mid];
            } else if (array[mid] > 0) {
                if (array[mid - 1] == 0)
                    return 0;
                else if (array[mid - 1] < 0) {
                    if (Math.abs(array[mid]) < Math.abs(array[mid - 1])) {
                        return Math.abs(array[mid]);
                    } else
                        return Math.abs(array[mid - 1]);
                }
            } else {
                if (array[mid + 1] == 0)
                    return 0;
                else if (array[mid - 1] > 0) {
                    if (Math.abs(array[mid]) < Math.abs(array[mid - 1])) {
                        return Math.abs(array[mid]);
                    } else
                        return Math.abs(array[mid - 1]);
                }
            }

        }
    }
    return 0;
    }
    }

在这里插入图片描述

   package com.interview.datastructure;

 import java.util.Arrays;

public class MinAbsoluteValue {
public static void main(String[] args) {
    int array[] = {-3, -3, -3};
    int min = Min(array);
    System.out.println(min);

}

public static int Min(int array[]) {
    if (array.length == 0)
        return Integer.MIN_VALUE;
    int len = array.length - 1;
    if (len < 1)
        return Math.abs(array[0]);
    //全部都是大于0的
    if (array[0] >= 0) {
        return Math.abs(array[0]);
    }
    //全部都是小于0的
    else if (array[len - 1] <= 0) {
        return Math.abs(array[len - 1]);
    }
    //数组中是有大于0也有小于0的 需要先找到正数与负数交界的地方
    else {
        int mid = 0;
        while (mid < len - 1) {
            mid = mid + (len - mid) / 2;
            if (array[mid] == 0) {
                return 0;
            } else if (array[mid] > 0) {
                if (array[mid - 1] == 0)
                    return 0;
                else if (array[mid - 1] < 0) {
                    if (Math.abs(array[mid]) < Math.abs(array[mid - 1])) {
                        return Math.abs(array[mid]);
                    } else
                        return Math.abs(array[mid - 1]);
                }
            } else {
                if (array[mid + 1] == 0)
                    return 0;
                else if (array[mid - 1] > 0) {
                    if (Math.abs(array[mid]) < Math.abs(array[mid - 1])) {
                        return Math.abs(array[mid]);
                    } else
                        return Math.abs(array[mid - 1]);
                }
            }

        }
    }
    return 0;

}}

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42664961/article/details/83588582