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;
        }
    }
    
  • 相关阅读:
    SSH访问linux 乱码问题
    AppScan典型的工作流程
    安装&卸载功能 [测试思路]
    巴菲特
    AppScan 庐山真面目
    常见网页安全测试工具
    AppScan报告类型
    股票市场股票状态
    我的2010
    股票市场开盘时间
  • 原文地址:https://www.cnblogs.com/daleyzou/p/9135589.html
Copyright © 2011-2022 走看看