📅  最后修改于: 2023-12-03 15:26:46.722000             🧑  作者: Mango
在Set-1中,我们已经看到了一个线性时间复杂度的算法来检查数字是否存在任何模式,其中的任何两个相邻数字的第i位不同。现在,在本篇文章中,我们将看到一种O(1)时间复杂度算法,该算法可以在不使用循环或递归的情况下执行此操作。
注意:
- 在本篇文章中使用的算法只能检查数字是否具有模式,并给出了具有模式的数字,但对于不具有模式的数字,无法给出原因。此外,这个算法不能给出哪两个位不同。
- 本篇文章中使用的算法仅适用于整数。
该算法依赖于以下前提:
基于这些前提,我们可以编写以下算法:
该算法可以通过以下python代码实现:
def isPatternPresent(N):
N1 = N % 10
# check if pattern exists in the number
while(N >= 10):
N = N // 10
N2 = N % 10
N = N // 10
N3 = N % 10
N = N // 10
N4 = N % 10
if (N1 ^ N2) != 0 and (N2 ^ N3) != 0 and (N3 ^ N4) != 0:
return False
return True
让我们看一些示例来理解此算法的工作原理。
| Number | Result | | ------ | ------ | | 12345 | false | | 101 - 5 | false | | 12321 | true | | 1023454321 | true |
在本篇文章中使用的算法的时间复杂度为$O(1)$,因为在循环中执行的操作数是恒定的。而且,算法空间复杂度为$O(1)$,因为我们只需要为变量分配固定的内存。因此,对于对于检查数字是否有其他模式的位,此解决方案是最好的。
在本篇文章中,我们看到了一种线性时间复杂度算法来检查数字是否存在任何模式。此外,我们还看到了一种$O(1)$时间复杂度算法来完成此操作。虽然$O(1)$时间复杂度算法只适用于整数,但在特定情况下非常有用。因此,我们可以根据我们的要求选择合适的算法。