r - 如何确定简单回文 R 码的时间复杂度?
问题描述
我对计算算法或代码的时间复杂度很陌生,所以我不确定下一个函数的复杂度是多少:
isPalindrome <- function(num){
if(num < 0) return(F)
rev <- 0
orig_num <- num
while(num != 0){
pop <- num %% 10
num <- num %/% 10
rev <- rev*10 + pop
}
if(orig_num == rev) return(T)
else return(F)
}
并调用该函数,例如isPalindrome(122221)
将返回TRUE
。基本思想是计算一个反向数,然后与原始数进行比较,如果它们相等,则它是一个回文。
我的基本直觉是,为了计算反向数字,while
循环将遍历每个数字,例如,对于一个 4 位数字1221
,将有 4 个动作(每个动作都有一些执行时间来完成),所以如果我数字相对于其数字变得大 2 倍,例如12222221
,我将需要执行 8 个操作。然后,我的输入增加了 2,时间也增加了 2,所以时间复杂度应该是O(n)
。这个对吗?
解决方案
您的直觉是正确的:您的算法将O(n)
根据数字的数字运行。也就是说,将其与数字的大小相比较,an O(floor(log10(n)) + 1)
,即为数数功能。
推荐阅读
- c# - 选择文件后,CommonOpenFileDialog 再次打开
- r - 如何将整数格式的日期列转换为基础 R 中的日期格式?
- angular - Keycloak 所需操作 - 条款和条件 - 将用户重定向回登录页面的问题(特定于浏览器)
- python - 在 Pyspark 中过滤嵌套的 JSON 结构并获取字段名称作为值
- javascript - Javascript - 一旦元素具有值的事件
- tcl - 使用 openseesMP 时分析终止?
- javascript - 如何将事件从组件传递到嵌套函数?
- python - “节点”对象没有用于二叉树实现的属性“插入”
- python - 有人想告诉我为什么我的 pygame 代码在使用 pygame Vectors 时会滞后吗?
- android - 如何知道该类在哪个进程中运行?