1.题目

2.解答
class Solution {
public List<String> buildArray(int[] target, int n) {
List<String> list = new ArrayList<>();
boolean flag = false;
int count = 0;
for(int i = 1; i <= n; i++){
if(binarySearch(target, i)){
list.add("Push");
// 如果已经满足target数组长度,就退出
if(++count == target.length){
break;
}
} else{
list.add("Push");
list.add("Pop");
}
}
return list;
}
// 因为是有序的,所以使用二分查找法
public boolean binarySearch(int[] target, int i){
int low = 0, high = target.length - 1;
while(low <= high){
int mid = low + (high - low) / 2;
if(target[mid] == i){
return true;
}else if(target[mid] > i){
high = mid -1;
} else{
low = mid + 1;
}
}
return false;
}
}
从O(n^2)-----到O(nlogn)的时间复杂度
本文介绍了一种算法优化方法,通过使用二分查找技术,将原有的O(n^2)时间复杂度降低到了更高效的O(nlogn)。该方法特别适用于处理有序数组,通过Push和Pop操作模拟目标数组的构建过程,有效提升了算法效率。
206

被折叠的 条评论
为什么被折叠?



