您将获得一个数组A []。您需要将此数组划分为恰好K个非空段,并检查所有段中最大元素中的最小元素S是否小于Q. 换句话说,如果我们将每个段的最大元素存储在数组P []中,那么你必须检查P []中的最小元素是否小于Q.
输入:
第一行输入包含多个测试用例,T 每个测试用例的第一行包含三个整数: N表示数组A []中的元素数,K表示段数和Q. 每个测试用例的第二行包含 N个以空格分隔的整数,A1,A2,...... An。
输出: 对于每个测试用例,如果S小于Q,则打印S,否则打印"否" (没有引号)。 每个测试用例的答案应该换个新的一行。
约束:
这是我的解决方案: 在分析时,我认为如果我们将数组的最小元素保持在大小为1的段中,那么所有段的最大值的最小值将是该数组的最小元素。这样做,我们只需要比较最小元素和Q,以打印所需的输出。
public static void main(String[] args)
{
Scanner s=new Scanner(System.in);
int t = s.nextInt();
int n, k, q, i, min;
while (t-- > 0)
{
n = s.nextInt();
k = s.nextInt();
q = s.nextInt();
int[] a = new int[n];
for(i = 0; i < n; i++)
a[i] = s.nextInt();
min = 0;
for(i = 1; i < n; i++) {
if(a[i] < a[min]) {
min = i;
}
}
if(a[min] < q)
System.out.println(a[min]);
else
System.out.println("NO");
}
}
此解决方案满足除一个以外的所有测试用例,并且是隐藏的。任何人都可以帮我解决这个问题。
答案 0 :(得分:0)
我知道,Hackerearth的Capillary Software Hackathon已经提出了这个问题。
嗯,这个问题含糊不清。没有明确的“k”定义,也应该是均匀溢出或随机等等
此代码传递了一个您无法通过的案例,但在所有其他情况下都失败了:
t = int(raw_input())
for _ in range(t):
n,k,q = map(int,raw_input().split())
arr = map(int,raw_input().split())
qt = n/k
arr_new = []
for i in range(k):
max_num = max(arr[i*qt : (i+1)*qt])
arr_new.append(max_num)
min_num = min(arr_new)
if(min_num < q):
print min_num
else:
print "NO"
答案 1 :(得分:-1)
问题清楚地表明“你需要将这个数组划分为恰好K个非空段,并检查所有段中最大元素中的最小元素S是否小于Q.”
在评论中指出,你的程序中根本没有使用“k”。
例:
n = 6
A [] = [17,3,2,5,8,19]
k = 3
Q = 7
根据你的代码,由于min元素是2,输出将是2(2 <7)。但是,问题要求你首先将数组分成k个相等的部分(在这种情况下为3),然后在最大的段中找到最小值,然后将它与Q进行比较。 因此,如果我们将数组A []分成3个段{17,3},{2,5},{8,19},我们看到所有max的min元素是5.因为,5&lt; 7,输出为5。
这是基于我从问题中理解的内容。然而,基于'k'的分段应该是如何进行的还不是很清楚。我假设了一个顺序分段。