c++ - 如何在小于 O(N) 的时间内解决这个问题?
问题描述
我有一个排序(升序)元素的数组作为输入。我想知道这些元素是否构成一个系列,其中每个当前元素都可以被它之前的所有元素整除。这是我能想到的在 O(n) 时间内解决这个问题的明显方法:
bool CheckArray(int arr[], int no_of_elements)
{
if (no_of_elements == 1)
return true;
for (int i = 1; i < no_of_elements; i++)
if (arr[i] % arr[i - 1] != 0)
return false;
return true;
}
示例 1:输入:3 6 9 12 输出:False
示例 2:输入:3 6 12 输出:真
有什么方法可以在少于 O(n) 的时间内完成吗?如果是,如何?
解决方案
不可能比 O(n) 做得更好。
每个元素都可以有一个值,将解决方案从真更改为假。因此,您至少需要对每个元素进行一次操作,以检查它。
因此,您将至少有 O(n)。
推荐阅读
- r - 将 DF 拆分为几列
- c++ - 如何在宏定义中连接 __func__ 和 __LINE__
- sharepoint - SharePoint 2010 - 自定义可重用工作流
- mongodb - "errmsg": "db 已经存在,不同的 case 已经有:[Test] 试图创建 [test]"
- python - 使用 Numpy Python 的列式 Pearson 相关性
- c++ - 在 c++ 中重载小于运算符以在 std::sort 中使用
- r - 将最后一列移动到 R 中的第 n 个位置
- python - 使用正则表达式获取指定字符串之间的所有文本
- css - 如何使用 react-native 和 align 让 flex 元素缩小到它们的内容?
- eclipse - 在 Tomcat 上的 Eclipse 中启动 Springboot 应用程序