360算法试题--小明的圈地运动

圈地运动

http://www.nowcoder.com/questionTerminal/37554f9e45404fa785bd029e5f08280e

1. 思路

(1)最重要的一点:

  • 构成多边形的条件: 其他边之和大于最长边
  • 边数大于3

(2)根据题目要求可知,依次检索,达到条件就输出,时间复杂度O(n)

(3)第i个点与前i-1个点,只有和的关系(其实是减去最大值的和),所以不需要。

2.在循环读入时所要记录的数据

  • 前i项和sum
  • 前i项中的最大值MaxNum
  • 前i项和减去最大值sumSubMax

3. 判断逻辑

在循环体内判断MaxNum-sumSubMax < 0?成立直接输出i+1(i从零开始),break;不成立,循环。当i = n-1时仍然不成立输出-1

4. Code

Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        if (n < 3) {
            System.out.println(-1) ;
        }
        int sum;
        int temp;
        int maxNum = sum = sc.nextInt();

        for (int i = 1; i < n; i++) {
            maxNum = (temp = sc.nextInt()) > maxNum? temp : maxNum;
            sum += temp;
            int SumSubMax = sum - maxNum;
            if (i > 1) {
                if (maxNum < SumSubMax) {
                    System.out.println(i+1) ;
                    break;
                }
                if (i == n-1) {
                    System.out.println(-1) ;
                }
            }
        }
全部评论
有我大Java的地方就有解析!!!!!
点赞 回复 分享
发布于 2019-09-06 17:14
if (i == n-1) {                     System.out.println(-1) ;                 } 为什么在i == n-1时候推出,不应该是n吗?
点赞 回复 分享
发布于 2019-09-06 17:43

相关推荐

Hello_WordN:咱就是说,除了生命其他都是小事,希望面试官平安,希望各位平时也多注意安全
点赞 评论 收藏
分享
与火:这不接? 留子的钱不挣白不挣
点赞 评论 收藏
分享
点赞 评论 收藏
分享
4 收藏 评论
分享
牛客网
牛客企业服务