zoukankan      html  css  js  c++  java
  • 数组任意取三个数中乘积最大值

    一、给定一个整型数组,包括正负值,找出取任意三个值的乘积最大

      1、对整型排序(这里使用堆排序)

        

    //堆排序
        private static void headSort(int arr[], int len) {
            int s = len / 2;
            for (int i = s; i >= 0; i--) {
                hSort(arr, i, len);
            }
    
            for (int i = len; i >0 ; i--) {
                swap(arr, 0 , i);
                hSort(arr, 0, i-1);
            }
        }
    
        private static void swap(int arr[], int s, int n) {
            int t = arr[s];
            arr[s] = arr[n];
            arr[n] = t;
        }
    
        private static void hSort(int arr[], int s, int len) {
            int v = arr[s];
    
            for (int i = 2 *s + 1; i < len; i*=2) {
                if (i < len && arr[i] < arr[i+1]) {
                    i = i + 1;
                }
                if (v >= arr[i]) break;
                arr[s] = arr[i];
                s = i;
            }
    
            arr[s] = v;
        }
    

      2、最大值只能是最小两个和最大一个或者最大三个值的乘积

      

    private static int findMaxSub(int arr[], int len) {
            return Math.max(arr[0] * arr[1] * arr[len-1], arr[len - 3] * arr[len - 2] * arr[len - 1]);
        }
    

      3、测试

      

        public static void main(String[] args) {
            int arr[] = {-3, -5, -8, 0, 2, 4, 6};
            headSort(arr, arr.length - 1);
            System.out.println(findMax(arr, arr.length));
        }
    

      

  • 相关阅读:
    运算符与优先级
    数据类型
    c++基础
    有关进制
    函数二——递归
    字符串与随机数
    C语言第一课
    Linux-Shell
    Linux入门
    文本处理三剑客命令初探
  • 原文地址:https://www.cnblogs.com/junxing/p/11074803.html
Copyright © 2011-2022 走看看