【发布时间】:2019-09-05 05:04:41
【问题描述】:
我已经给队列初始位置增加了 1,从行前的 1 到后面的 n。
队列中的任何人都可以贿赂直接排在他们前面的人以交换位置。如果两个人交换位置,他们仍然会佩戴相同的标签,表示他们原来的位置。一个人最多可以贿赂另外两个人。例如,如果 n = 8 和 Person 5 贿赂 Person 4,则队列将如下所示:1,2,3 ,5,4,6,7,8.
minimumbribes 必须打印一个整数,表示创建原始队列所需的最低贿赂数量,如果行配置不可行,则Too chaotic。如果一个人的贿赂数量不超过 2,则线路配置是不可能的。
minimumBribes 具有以下参数:
- q:整数数组。
- 1
示例输入
2
5
2 1 5 3 4
5
2 5 1 3 4
输出
3
Too chaotic
使用排序逻辑,我刚刚计算了来得早的人,并且大于跟随人。如果线路配置可能,它还会打印贿赂总数,否则它会打印 Too chaotic 消息。
static void minimumBribes(int[] q) {
int count = 0; // Counts the no of bribes by an individual.
int j;
int total = 0; // Total no of bribes.
loop1 : for(int i = 0; i < q.length; i++) {
loop2 : for(j = i; j < q.length; j++) {
if(q[i] > q[j]) {
count++;
if(count > 2) {
System.out.println("Too chaotic");
break loop1;
}
}
else if (q[i] <= q[j]) {
total += count;
count = 0;
}
}
}
if(count <= 2)
System.out.println(total);
}
上面提到的代码对于一个小队列运行完美,但是如果一个数组的大小很大,它就会超过固定的处理时间限制。
【问题讨论】:
标签: java performance time-complexity