• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >编程问答 > 一个时间复杂度和空间复杂度限定的问题

一个时间复杂度和空间复杂度限定的问题

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-07

佚名通过本文主要向大家介绍了时间复杂度空间复杂度,时间空间复杂度,算法的时间空间复杂度,空间复杂度,算法的空间复杂度是指等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:一个时间复杂度和空间复杂度限定的问题
描述:

待字闺中的微信公共帐号上看到的,时间复杂度O(n)、空间复杂度O(n)能想出来。O(1)的想不出来呀。

给定数组A,大小为n,数组元素为1到n的数字,不过有的数字出现了多次,有的数字没有出现。请给出算法和程序,统计哪些数字没有出现,哪些数字出现了多少次。能够在O(n)的时间复杂度,O(1)的空间复杂度要求下完成么?


解决方案1:

时间复杂度为o(n),空间复杂度为o(n)是利用hash思想,这里既然要求空间复杂度为o(1),那就可以从数组A本身做文章,原文链接:http://www.ituring.com.cn/article/55331,简单来说,让数组A的每个数表示为A[i]=n*org + num的形式
写一个c实现的代码:

/**
 * 给定数组A,大小为n,数组元素为1到n的数字,不过有的数字出现了多次,有的数字没有出现。请给出算法和程序,统计哪些数字没有出现,哪些数字出现了多少次
 * 时间复杂度为O(N),空间复杂度为O(1)
 */

#include <stdio.h>
#include <stdlib.h>

void calCount(int *arr, int n)
{
    int i;

    for (i = 1; i <= n; i ++)
        arr[i] *= n;

    for (i = 1; i <= n; i ++)
        arr[arr[i] / n] += 1;

    // 打印出现次数
    for (i = 1; i <= n; i ++) {
        printf("%d出现次数为%d\n", i, arr[i] % n);
    }
}


int main(void)
{
    int i, n, *arr;

    while (scanf("%d", &n) != EOF) {
        arr = (int *)malloc(sizeof(int) * (n + 1));

        for (i = 1; i <= n; i ++)
            scanf("%d", arr + i);

        calCount(arr, n);

        free(arr);
    }

    return 0;
}

解决方案2:

算法代码,Python

# encoding: utf-8
'''
Created on 2013年9月13日
'''
import sys

def main():
    a = [1, 2, 3, 4, 4, 6, 7, 7, 9]

    n = len(a)
    for k, v in enumerate(a):
        a[k] = v * n
    print a

    for k, v in enumerate(a):
        a[(v / n - 1)] += 1

    print a

    for k,v in enumerate(a):
        a[k] = a[k]%n

    omitted = []
    duplicated = []
    for k,i in enumerate(a):
        if i < 1:
            omitted.append(k+1)
        elif i > 1:
            duplicated.append(k+1)

    print omitted
    print duplicated


if __name__ == '__main__':
    sys.exit(main())


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 一个要求时间复杂度ON,空间O1的排序问题
  • 一个时间复杂度和空间复杂度限定的问题

相关文章

  • 2017-06-07 服务器如何验证APP接口的调用者是否登录
  • 2017-06-07 字符串数组PHP数组取数插入字符串拼接
  • 2017-06-07 Laravel使用多个数据库的问题。
  • 2017-06-07 我想了解下,如果我有个视频文件上传到了一个临时空间,然后我做了一个复制出来(Qiniu_RS_Copy)复制到另外一个空间
  • 2017-06-07 使用七牛直接部署angular应用如何去除URL中的#号
  • 2017-06-07 (python)django的viewspy引入模块失败
  • 2017-06-07 PHP多维数组一道php数组排序的笔试题
  • 2017-06-07 python爬虫python内打开another终端
  • 2017-06-07 (golang)大型C语言项目中混合go语言编程的问题
  • 2017-06-07 django(python)Django中如何使用异步

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • (python)如何在Django中使用第三方库?
    • 为什么要缓存带参数的url?
    • word遇到问题需要关闭面试遇到一个算法问题,寻求思路
    • 疯了submin-211-0smtp怎么配置发邮件
    • 新人提问关于JS中的正则表达式的问题
    • 如何获得私有空间中资源被访问的次数?
    • scrapy的log中的"Crawled","scraped"是什么含义
    • Excel编程求助
    • (laravel)在使用Lumen框架遇到的视图问题
    • SQLServer多进程多线程并发情况下如何保证insert到一张表中的某个字段顺序递增

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有