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工程师##算法工程师#
全部评论

相关推荐

在改简历的大卫很认真:天天有面试 = 你已经在 offer 门口了。 海投能面成这样,说明你的简历、基础、学历都是过关的,缺的只是一次刚好匹配的缘分。 关于你说的 SQL 恐惧,我帮你捋一下: - 面试里考来考去,真就那几类: 分组、去重、关联、子查询、窗口函数(row_number、rank、sum 开窗) ​ - 面试官要的不是“写得花里胡哨”,而是思路稳、不出错。 你恐惧的本质不是不会, 是怕临场卡壳、怕写错、怕被追问。
点赞 评论 收藏
分享
评论
点赞
3
分享

创作者周榜

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