数字圆环
小易有一个长度为n的数字数组a1, a2, …, an。
问你是否能用这n个数字构成一个环(首尾连接),使得环中的每一个数字都小于它相邻的两个数字的和(每个数字都必须使用并且每个数字只能使用一次)。
输入描述:
第一行包含一个整数t(1<=t<=10),表示测试用例的组数。
每个测试用例输入如下:
第一行一个整数n,表示数字的个数;
第二行n个整数a1, a2, …, an,每两个整数之间用一个空格分隔。
输入数据保证 3<=n<=105, 1<=ai<=109。
输出描述:
输出应该包含t行,对于每组用例,若能输出"YES",否则输出"NO"。
输入例子1:
1
5
17 6 17 11 17
输出例子1:
YES
输入例子2:
1
3
1 2 4
输出例子2:
NO
参考1:
思路:由大到小排列,依次放入一个新的列表里,注意摆放顺序,需符合环的特性。
m = int(input()) for _ in range(m): n = int(input()) num = map(int,input().split()) num = sorted(num, reverse = True) #降序排列 res = [0]*(n+2) for i in range(n): if i == 0: res[1] = num[i] res[n+1] = num[i] elif i == 2: res[0] = num[i] res[n] = num[i] elif i == 1: res[2] = num[i] else: res[i] = num[i] k = 0 for j in range(1,n+1): #再逐步核对是否符合 if res[j] >= res[j-1] + res[j+1]: print("NO",end = "\n") break else: k = k + 1 if k == n: print("YES",end = "\n")
您的代码已保存
答案正确:恭喜!您提交的程序通过了所有的测试用例
参考2:
思路:先把数组由小到大排序,然后只要确定最大的数在第二大数与第三大的数的和之间,就满足条件
m = int(input()) for _ in range(m): n = int(input()) num = map(int,input().split()) num = sorted(num) #升序排列 if num[-1] < num[-3] + num[-2]: print("YES",end = "\n") else: print("NO",end = "\n")
您的代码已保存
答案正确:恭喜!您提交的程序通过了所有的测试用例