【数据结构】时间复杂度---OJ练习题

这篇具有很好参考价值的文章主要介绍了【数据结构】时间复杂度---OJ练习题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

🌴时间复杂度练习

📌面试题--->消失的数字

题目描述

题目链接:面试题 17.04. 消失的数字

🌴解题思路

📌思路1:

malloc函数用法 

📌思路2:

📌思路3:


🌴时间复杂度练习

🙊 如果有不了解时间复杂度的请移步上一篇文章:【数据结构】初识

📌面试题--->消失的数字

题目描述

数组nums包含从0n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?

题目链接:面试题 17.04. 消失的数字

示例 1:

输入:

[3,0,1]

输出:

2

示例 2:

输入:

[9,6,4,2,3,5,7,0,1] 

输出:

8

🌴解题思路

📌思路1:

1.开辟一个额外的N+1个数的数组(即malloc一个额外N+1个数的数组),建立一个映射关系,,将数组的值全部初始化为-1

2.遍历这些数字,这个数是多少就写到数组的对应位置

3.再遍历一遍数组,哪个位置是-1,哪个位置的下表就是缺失的数字

因为malloc数组基本没有时间消耗,但是初始化时需要循环N+1次,填数字的时候也循环了N+1次,最后遍历时最坏也要循环N+1次,总共3N+3次,根据大O的渐进表示法就知道时间复杂度O(N)。

时间复杂度是:O(N)

代码展示:

int missingNumber(int* nums, int numsSize){
     int* p = (int*)malloc((numsSize+1) * sizeof(int));
     for(int i=0;i<=numsSize;i++)
     {
         p[i]=-1;
     }

     for(int i=0;i<numsSize;i++)
     {
         p[nums[i]]=nums[i];
     }

     for(int i=0;i<=numsSize;i++)
     {
         if(p[i]==-1)
         {
             free(p);
             return i;
         }
     }
     free(p);
     return -1;
}

结果:

【数据结构】时间复杂度---OJ练习题,数据结构探索,数据结构,c语言,开发语言,算法

malloc函数用法 

函数声明:

void *malloc(size_t size)

头文件: <stdlib.h>

参数: 

size --- 内存块的大小,以字节为单位。

返回值:

该函数返回一个指针 ,指向已分配大小的内存。为避免内存泄漏,必须用 free() 或 realloc() 解分配返回的指针。如果请求失败,则返回 NULL。

示例:

double * pt;
pt = (double * ) malloc (30 * sizeof(double));

这段代码请求30个double类型值的空间,并且让pt指向该空间所在位置。 

在释放空间时只需如下操作:

free(pt);

📌思路2:

异或:------>符号:^

用一个 x = 0,x跟数组中的这些数据都异或一遍,

然后再跟0-N之间的数字异或一遍,最后x才是缺失的数字。

注意:❗️0^x = x       ❗️ a^a = 0

           ❗️异或满足交换律和结合律(即1^2^3^1^2 = 1^1^2^2^3 =3)

因为第一遍异或时需要循环N次,第二遍也需要N次,总共2N次,根据大O的渐进表示法就知道时间复杂度为O(N)。

时间复杂度:O(N)

代码展示:

int missingNumber(int* nums, int numsSize){
    int x=0;
    for(int i = 0;i < numsSize; ++i)
    {
        x ^= nums[i];
    }

    for(int j = 0;j < numsSize+1; ++j)
    {
        x ^= j;
    }
    return x;
}

注意: 这里* nums表示存放0-N中缺失了一个数字后的所有数字的数组,一共有numsSize个,而0-N之间一共有numsSize+1个数。

结果:

【数据结构】时间复杂度---OJ练习题,数据结构探索,数据结构,c语言,开发语言,算法

📌思路3:

公式计算:

1.求0-N这些数的和(利用求和公式)

2.再求数组中存放的这些数的和(用for循环)

3.将第一次求的和减去第二次求的和即为缺失的数字

因为第一次求和使用公式所以基本不消耗时间,第二次求和进行了N次循环,总共N次,根据大O的渐进表示法就知道时间复杂度为O(N)。

时间复杂度:O(N)

代码展示: 

int missingNumber(int* nums, int numsSize){
int sum = ((numsSize + 1) * numsSize) / 2;
for (int i = 0;i< numsSize; ++i)
{
    sum -=*(nums+i);
}
return sum;
}

结果:

【数据结构】时间复杂度---OJ练习题,数据结构探索,数据结构,c语言,开发语言,算法

🔥今天的分享就到这里,如果觉得博主的文章还不错的话,请👍三连支持一下博主哦🤞

 【数据结构】时间复杂度---OJ练习题,数据结构探索,数据结构,c语言,开发语言,算法文章来源地址https://www.toymoban.com/news/detail-589367.html

到了这里,关于【数据结构】时间复杂度---OJ练习题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构之时间复杂度-空间复杂度

    大家好,我是深鱼~ 目录 1.数据结构前言 1.1什么是数据结构 1.2什么是算法 1.3数据结构和算法的重要性 1.4如何学好数据结构和算法 2.算法的效率 3.时间复杂度 3.1时间复杂度的概念 3.2大O的渐进表示法 【实例1】:双重循环的时间复杂度:O(N) 【实例2】:双重循环的时间复杂度

    2024年02月14日
    浏览(42)
  • 数据结构--时间复杂度与空间复杂度

    在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。一个算法执行所耗费的时间,从理论上说,是不能算出来的,只有程序在机器上跑起来,才能知道,但是如果所有的算法都需要在机器上运行起来去测试时间复杂度就会很麻烦,所以才有了时

    2024年02月16日
    浏览(43)
  • 【数据结构】---时间复杂度与空间复杂度

    💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃 个人主页 :阿然成长日记 👈点击可跳转 📆 个人专栏: 🔹数据结构与算法🔹C语言进阶 🚩 不能则学,不知则问,耻于问人,决无长进 🍭 🍯 🍎 🍏 🍊 🍋 🍒 🍇 🍉 🍓 🍑 🍈 🍌 🍐 🍍 · 时间复杂度的定义

    2024年02月15日
    浏览(53)
  • 数据结构——时间复杂度和空间复杂度

    1.算法效率 2.时间复杂度 3.空间复杂度 4. 常见时间复杂度以及复杂度oj练习 1.算法效率 1.1 如何衡量一个算法的好坏 如何衡量一个算法的好坏呢?比如对于以下斐波那契数的计算 我们看到虽然用递归的方式实现斐波那契很简单,但是简单一定代表效率高吗? 我们接着往下看。

    2024年02月13日
    浏览(49)
  • 数据结构入门 — 时间复杂度、空间复杂度

    数据结构_空间复杂度_时间复杂度讲解_常见复杂度对比 本文介绍数据结构中的时间复杂度和空间复杂度 ***文章末尾,博主进行了概要总结,可以直接看总结部分*** 博主博客链接:https://blog.csdn.net/m0_74014525 点点关注,后期持续更新系列文章 算法效率指的是算法在处理数据时

    2024年02月13日
    浏览(54)
  • 数据结构——时间复杂度与空间复杂度

    目录 一.什么是空间复杂度与时间复杂度 1.1算法效率 1.2时间复杂度的概念 1.3空间复杂度的概念 二.如何计算常见算法的时间复杂度 2.1大O的渐近表示法  使用规则 三.如何计算常见算法的空间复杂度 3.1 大O渐近表示法 3.2 面试题——消失的数字  3.3 面试题——旋转数组 分为两

    2024年02月07日
    浏览(46)
  • 【数据结构】时间复杂度与空间复杂度

    在学习C语言的时候,大多数的小伙伴们并不会对算法的效率了解,也许算法也是一个陌生的领域,当进入了数据结构这个模块,就应该对算法的效率做一个清晰的认识。但是算法的效率是什么呢?这里就引出来时间复杂度与空间复杂度的概念了。 算法效率 指的是算法解决问

    2024年02月07日
    浏览(45)
  • 数据结构:时间复杂度和空间复杂度计算

    算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度, 而空间效率被称作空间复杂度。 时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主 要衡量一个算法所需要的额外空间,在计算机发展的早期,计算机的存储容量很小

    2024年02月11日
    浏览(43)
  • 数据结构:算法(特性,时间复杂度,空间复杂度)

    算法(Algorithm)是对 特定问题求解步骤 的一种描述,它是指令的有限序列,其中的每条指令表示一个或多个操作。 一个算法必须总在执行有穷步之后结束,且每一步都可在有穷时间内完成。 算法必须是有穷的,而程序可以是无穷的 算法中每条指令必须有确切的含义,对于

    2024年02月06日
    浏览(57)
  • 数据结构之时间复杂度与空间复杂度

    目录 1.算法效率 1.2算法的复杂度 1.3复杂度对于校招的重要性 ​编辑2.时间复杂度 空间复杂度: 1.1 如何衡量一个算法的好坏? 比方说我们非常熟悉的斐波拉契数列: 递归实现方式非常简洁,但一定好吗?如何衡量其好与坏? 定义: 算法在编写成可执行程序后,运行时需要

    2024年02月05日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包