Cha*_*kar 0 java arrays algorithm
串联电路中有N个从1到N的灯泡。数组表示从0到(N-1)的灯泡编号。最初,所有灯泡均已关闭,并从阵列的索引0打开。我们需要计算在串联电路中打开灯泡的实例数量。
例如 :
A = [2,1,3,5,4]应返回3
Explanation :-
Instant Bulb number on All bulbs in series switched on
0 2 false
1 1,2 true
2 1,2,3 true
3 1,2,3,5 false
4 1,2,3,4,5 true
Run Code Online (Sandbox Code Playgroud)
因此,在3种情况下,灯泡已打开。数是3。
我的方法
我的解决方案运行得很好,但是时间复杂度为O(n2)。我的解决方法如下
public int solution(int[] A) {
// write your code in Java SE 8
int counter = 0;
for (int i = 0; i < A.length; i++) {
int[] intermediate = Arrays.copyOfRange(A, 0, i);
Arrays.sort(intermediate);
if(checkIfOrdered(intermediate))
counter++;
}
return counter;
}
private static boolean checkIfOrdered(int[] intermediate) {
boolean flag = true;
for (int i = 0; i < intermediate.length; i++) {
if(intermediate[i] != (i +1) ){
flag = false;
break;
}
}
return flag;
}
Run Code Online (Sandbox Code Playgroud)
有人可以指出如何改善我的代码的性能吗?任何指针将非常有帮助!
遇到这些问题,有时可以通过不同地计算答案来消除一些所需的循环。
在您的示例中,似乎在每个瞬间都需要的唯一信息是灯泡的数量以及迄今为止找到的最大灯泡数量。
例如:
答案是最大次数等于灯泡上的次数。