数组任意取三个数中乘积最大值

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

  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));
    }

  

原文地址:https://www.cnblogs.com/junxing/p/11074803.html

时间: 2024-10-09 16:19:56

数组任意取三个数中乘积最大值的相关文章

用三元运算符比较两个整数是否相等以及取三个数中的最大值

1.比较两个整数是否相等: class Hello2 { public static void main(String[] args) { int x = 10; int y = 5; boolean b = (x == y) ? true : false; System.out.println("b = " + b); } } 结果: true : false可以省略,因为(x = y)这个判断的结果不是true就是false. 2.取三个数中的最大值: class Hello2 {

JAVA_新建一个方法并且求三个数中的最大值

package wac.wev.as;//新建一个方法在求最大值import java.util.Scanner; public class MaxLian {public static void main(String[] args){//键盘录入以及导包Scanner sc= new Scanner(System.in);//数据接收System.out.println("请输入第一个数据:");int a = sc.nextInt();System.out.println(&qu

求三个数中的最大值

三个数a b c int a = 10; int b = 100; int c = 1000; 第一种方式if嵌套 int max = 0; if (a > b) { if (a > c) { max = a; } else { max = c; } } else if (b > a) { if (b > c) { max = b; } else { max = c; } } else if (c > a) { if (c > b) { max = c; } else

三数中找最大值

static void Main11三数中找最大值(string[] args) { //1.输入三个数,找出最大的输出 Console.WriteLine("请输入第一个数"); int a = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("请输入第二个数"); int b = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("

求10个数中的最大值

求10个数中的最大值: 求数组长度:sizeof(arr) / sizeof(arr[0]) #define _CRT_SECURE_NO_WARNING #include<stdio.h> #include<stdlib.h> int main() { int arr[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; int i = 0; int max = arr[0]; for (i = 1; i < sizeof(arr) / sizeo

2.任意输入三个数,求最大数

(1)笨办法,采用if嵌套和&&判断,比较消耗资源,不过也能达到要求: #include<iostream> using namespace std; int main(){    int a,b,c,max;    cout<<"please input 3 numbers:"<<endl;    cin>>a>>b>>c;    if(a>b&&a>c)       

javascript基础程序(算出一个数的平方值、算出一个数的阶乘、输出!- !- !- !- !- -! -! -! -! -! 、函数三个数中的最大数)

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script> /* 算出一个数的平方值 function add(a){ var b=Math.sqrt(a); return b; } alert(add(3));*/ /*// 算出一个数的阶乘 func

【C语言】求多个数中的最大值(可变参数列表)

求多个数中的最大值要求用可变参数列表: 代码如下: <span style="font-size:18px;">#include<stdio.h> #include<stdarg.h> int Max(int n,...) { int i=0; int max=0; va_list arg; va_start(arg,n); for(i=0;i<n;i++) { int val=va_arg(arg,int); if (val>max)

if语句求三个数中最大的

Console.WriteLine("请输入第一个数:"); int a = Convert.ToInt32( Console.ReadLine()); Console.WriteLine("请输入第二个数:"); int b = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("请输入第三个数:"); int c = Convert.ToInt32(Console.ReadLine(