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) ;
}
}
}