zoukankan      html  css  js  c++  java
  • 编程题3

    题目描述:定义有数组int a[200] = {1,2,3,3,4,…},数组元素都为正整数,当满足a[i]+a[t]=a[x]时,其中,i、t、x均为正数,且小于等于n,求最大的a[x].

    问题的主要思路如下: 首先对数组进行排序,然后从后往前遍历数组。对于每遍历的一个数组元素a[i],判断从0到a[i-1]个元素中,是否满足a[j]+a[k]=a[i]的值。在判断的时候,可以采用如下思路:从前往后遍历子数组a[0,…..,i-1],对于遍历到的元素a[j],判断在子数组a[j+1,…,i-1]中是否存在a[i]-a[j]。如果存在,则说明存在j和k,使得a[j]+a[k]=a[i],此时的a[i]就是满足条件的最大值。

    代码:

    import java.util.Arrays;
    
    public class FindSuitable {
    
        public static void main(String[] args){
            int[] a={1,2,3,3,4,3,2,8,9,6};
            int result = findMaxValue(a);
            if (result == -1){
                System.out.println("不存在");
            }else {
                System.out.println("满足条件的最大值:"+result);
            }
        }
    
        private static int findMaxValue(int[] arr) {
            if (arr == null || arr.length == 0){
                return -1;
            }
            Arrays.sort(arr);
    
            for (int i = arr.length - 1; i >= 2; i--){
                for (int j = 0; j < i;j++){
                    // 判断在arr[j...i-1]是否存在arr[i]-arr[j],如果存在存在一个k使得arr[j]+arr[k]=arr[i]
                    if (isExists(arr,j,i-1,arr[i]-arr[j])){
                        return arr[i];
                    }
                }
            }
            return -1;
        }
    
        /**
         * 用二分法判断在arr[low...high】中是否存在data
         * @param arr
         * @param low
         * @param high
         * @param data
         * @return
         */
        private static boolean isExists(int[] arr, int low, int high, int data) {
            while (low < high){
                int mid = (low + high) / 2;
                if (arr[mid] == data){
                    return true;
                }else if (arr[mid] > data){
                    high = mid - 1;
                }else {
                    low = mid + 1;
                }
            }
            return false;
        }
    }
    
  • 相关阅读:
    oracle数据库导出与导入
    Mysql导入表信息[Err] 1067
    Golang--不定参数类型
    (转)Docker容器的重启策略及docker run的--restart选项详解
    (转)Golang--使用iota(常量计数器)
    Golang--匿名变量
    Golang--Hello World
    Ubuntu Server16.04 配置网卡
    U盘安装ubuntu 16.04 遇到 gfxboot.c32:not a COM32R image boot 的解决方法
    ipfs私链服务
  • 原文地址:https://www.cnblogs.com/daleyzou/p/9135589.html
Copyright © 2011-2022 走看看