1. 程式人生 > >在升序陣列中:求絕對值最小的數:思路分三步,需要注意邊界:len = length-1,引數陣列個數為空,為1的條件等;

在升序陣列中:求絕對值最小的數:思路分三步,需要注意邊界: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;

}}

在這裡插入圖片描述

在這裡插入圖片描述
在這裡插入圖片描述