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

相关推荐

06-23 11:43
门头沟学院 Java
allin校招的烤冷...:我靠,今天中午我也是这个hr隔一个星期发消息给我。问的问题还是一模一样的😅
点赞 评论 收藏
分享
在debug的柠檬精...:好消息:现在HR挑三拣四 15年后 HR跪着求要简历 坏消息:被挑的是这代人,到时候求人的也是这代人。真好。
点赞 评论 收藏
分享
评论
4
收藏
分享

创作者周榜

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