【发布时间】:2020-12-25 07:32:09
【问题描述】:
一个数组是单调递增或单调递减的。
例子:
输入:[1,2,2,3] 输出:真
输入:[3,2,2,1] 输出:真
输入:[1,3,2] 输出:假
这是我的 O(nlogn) 时间复杂度的代码。我使用排序和一个额外的数组来解决这个问题。我的代码如下:
bool isMonotonic(vector<int> array) {
vector<int>extraArray;
int i,j;
for(i=0;i<array.size();i++){
extraArray.push_back(array[i]);
}
sort(extraArray.begin(),extraArray.end());
for(i=0;i<array.size();i++){
if(array[i] != extraArray[i])
break;
}
if(i == array.size())
return true;
for(i = array.size() -1,j=0;j<extraArray.size();i--,j++){
if(array[i] != extraArray[j])
break;
}
if(j == extraArray.size())
return true;
return false;
}
如何在 O(n) 时间复杂度内解决?
【问题讨论】:
-
您尝试过一些更简单的方法吗?就像测试数组是否在增加一样。暂时忘记递减方面,也许灵感会来。
标签: c++ algorithm time-complexity