2018 360Java在线笔试 算法题(1)

360的第一道算法题还是比较好AC的,思路不是很复杂,将问题分解后,通过编码也很容易实现,只要for,if时注意取值范围和细节就好咯



import java.util.Scanner;

public class Main {    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] arr = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = sc.nextInt();
        }
        for (int i = 2; i < n; i++) {
            if(getResult(i, arr)){
                System.out.println(i+1);
                break;
            }
            if(i==n-1)
                System.out.println(-1);
        }
    }
    /**
     * 判断前i个木棍是否能组成圈地
     * @param i
     * @param arr 
     * @return */
    private static boolean getResult(int i, int[] arr) {
        //考虑:什么时候不能组成圈地?
        //1.找出前i个木棍的最大值arr(max)
        int max = getMax(i, arr);//max为最大值的下标
        //2.将除最大值以外的前i个木棍长度加起来得到sum
        int sum = getTotal(max, arr, i);
        //3.若 a>=sum,则肯定组不成圈地,返回false
        if(arr[max] >= sum)
            return false;
        //4.否则返回true
        else
            return true;
    }
    private static int getTotal(int max, int[] arr, int i) {
        int sum = 0;
        for (int j = 0; j <= i; j++) {
            sum += arr[j];
        }
        return sum - arr[max];
    }
    private static int getMax(int i, int[] arr) {
        int max = 0;
        for (int j = 1; j <= i; j++) {
            if(arr[j]>arr[max])
                max = j;
        }
        return max;
    }
}

#Java##笔试题目##Java工程师##算法工程师#
全部评论

相关推荐

09-18 20:41
阿里巴巴_后端
要个offer怎么这...:哈哈哈哈哈哈,我也拿了0x10000000个offer,秋招温啦啦啦,好开心
我的秋招日记
点赞 评论 收藏
分享
脾气小祖宗:这简历摸到都得狠狠地消毒液洗手😂
点赞 评论 收藏
分享
评论
点赞
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务