利用代码程序求时间复杂度

AC_YE 2020-09-16 12:57:01
...全文
423 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
5250 2020-09-16
  • 打赏
  • 举报
回复
引用 7 楼 lin5161678 的回复:
[quote=引用 2 楼 5250的回复:]很明显 每两项为-1,到N为止就是-n/2 时间复杂度O(1)

休息奇数偶数是不一样的[/quote]

没注意看
那就再判断最后一个是奇数或者偶数 偶数的话就如我之前说的
奇数的话加一个N
lin5161678 2020-09-16
  • 打赏
  • 举报
回复
引用 2 楼 5250的回复:
很明显 每两项为-1,到N为止就是-n/2 时间复杂度O(1)
休息奇数偶数是不一样的
自信男孩 2020-09-16
  • 打赏
  • 举报
回复
看要循环的次数是O(n);但是找到规律,用公式就是O (1);
算法的优势~
lin5161678 2020-09-16
  • 打赏
  • 举报
回复
直接通项公式 求结果 时间复杂度O(1) 完事
真相重于对错 2020-09-16
  • 打赏
  • 举报
回复
O(1) 直接导出公式 1-2 =-1; 3-4=-1; 。。。。 如果N是偶数 等于-1*N/2 奇数N+(N/2)*(-1)
qybao 2020-09-16
  • 打赏
  • 举报
回复
当然,如果你直接用公式,O(1)就可以
int main() {
    int i, n, sum=0, flg=1;
    scanf("%d", &n);
    sum = (-1)*(n/2) + (n%2==0?0:n); //通过技巧,每两项的和是-1,判断n是不是偶数,如果是偶数则-1*n/2,否则再+n
    printf("%d\n", sum);
    return 0;
}
5250 2020-09-16
  • 打赏
  • 举报
回复
很明显 每两项为-1,到N为止就是-n/2 时间复杂度O(1)
qybao 2020-09-16
  • 打赏
  • 举报
回复
这不是O(N)就可以了吗?
int main() {
    int i, n, sum=0, flg=1;
    scanf("%d", &n);
    for (i=1; i<=n; i++) {
        sum += flg*i;
        flg *= -1;
    }
    printf("%d\n", sum);
    return 0;
}

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧