数据结构初阶---复杂度的OJ例题

复杂度的OJ例题

  • 一、消失的数字
    • 1.思路一
    • 2.思路二
    • 3.思路三
  • 二、旋转数组
    • 1.思路一
    • 2.思路二
    • 3.思路三

一、消失的数字

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

1.思路一

排序+遍历:如果下一个数据不等于上一个数据加1,那么下一个数据就是那个消失的数字。
时间复杂度:O(N*LogN)由于这个时间复杂度时间复杂度过高,本思路不再冗余,赘述。

2.思路二

利用等差数列公式:从0加到n,然后再减去这个数组中的所有数字,那么最终所得的差就是缺失的数字。
时间复杂度:O(N)
代码如下:

#include <stdio.h>
int missingNumber(int* nums, int numsSize)
{int N = numsSize;int ret = N * (N + 1) / 2;for (int i = 0; i < N; i++){ret -= nums[i];}return ret;
}int main()
{int nums[] = { 0,1,2,3,4,5,7,8,9,10 };int sz = sizeof(nums) / sizeof(nums[0]);int ret=missingNumber(nums,sz);printf("%d", ret);return 0;
}

3.思路三

单身狗思路:利用:按位异或运算符:^(相同为0,相异为1)任何数字和0 ^ 还等于它本身。首先我们要把一个完整的数组按位异或起来,然后再与题目中缺失一个数字的数组再进行按位异或,最终得到的结果就是消失的数字。
代码如下:

#include <stdio.h>
int missingNumber(int* nums, int numsSize)
{int N = numsSize;int x = 0;//第1个循环的目的:先把一个完整的数组:从0~n的所有数字全部按位异或起来存放在一个数字x中//注意:这里循环的终止条件是:<=N,(因为我们连N也要算上)for (int i = 0; i <= N; i++){x ^= i;}//第2个循环的目的:就是让一个完整的数组与缺失一个数字的数组进行按位异或,最终得到的结果就是那个消失的数字!//注意:这里循环的终止条件是:<N,(因为nums数组中确失一个数字)for (int i = 0; i < N; i++){x ^= nums[i];}return x;
}int main()
{int nums[] = { 0,1,2,3,4,5,7,8,9,10 };int sz = sizeof(nums) / sizeof(nums[0]);int ret=missingNumber(nums,sz);printf("%d", ret);return 0;
}

二、旋转数组

链接力扣:旋转数组

1.思路一

中规中矩:依次向左旋转K个数据
合计旋转:K%N次
时间复杂度:O(N^2)
空间复杂度:O(1)
因为时间复杂度超过限制,所以说不予实现。

2.思路二

核心思想:以空间换时间:我额外开辟一个数组,直接复制从k开始后面所有数据到前面,然后把复制n-k的数字放后面。
时间复杂度:O(N)
空间复杂度:O(N)
在这里插入图片描述
代码如下:

void rotate(int* nums, int numsSize, int k)
{int n = numsSize;int* tmp = (int*)malloc(sizeof(int) * n);k %= n;//一定别忘了k%n!memcpy(tmp, &nums[n - k], sizeof(int) * k);memcpy(&tmp[k], nums, sizeof(int) * (n - k));memcpy(nums, tmp, sizeof(int) * n);free(tmp);//一定别忘了Free!!!因为是动态开辟的空间
}int main()
{int nums[] = { 1,2,3,4,5,6,7 };int k = 0;printf("请输入你想要旋转的次数:");scanf("%d", &k);int sz = sizeof(nums) / sizeof(nums[0]);rotate(nums, sz, k);for (int i = 0; i < sz; i++){printf("%d ", nums[i]);}return 0;
}

3.思路三

数学思想:以k为划分界线,左边逆置,右边逆置,整体逆置。

在这里插入图片描述
代码如下:

//逆置函数
void Inversion(int* nums, int left, int right)
{while (left < right){int tmp = nums[left];nums[left] = nums[right];nums[right] = tmp;left++;right--;}
}
//旋转函数
void rotate(int* nums, int numsSize, int k)
{int n = numsSize;k %= n;Inversion(nums, 0, n - k - 1);//左边逆置Inversion(nums, n - k, n - 1);//右边逆置Inversion(nums, 0, n - 1);//整体逆置}int main()
{int nums[] = { 1,2,3,4,5,6,7 };int k = 0;printf("请输入你想要旋转的次数:");scanf("%d", &k);int sz = sizeof(nums) / sizeof(nums[0]);rotate(nums, sz, k);for (int i = 0; i < sz; i++){printf("%d ", nums[i]);}return 0;
}

好了,今天的分享就到这里了
如果对你有帮助,记得点赞👍+关注哦!
我的主页还有其他文章,欢迎学习指点。关注我,让我们一起学习,一起成长吧!
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/182748.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

远程管理SSH服务

一、搭建SSH服务 1、关闭防火墙与SELinux # 关闭firewalld防火墙 # 临时关闭 systemctl stop firewalld # 关闭开机自启动 systemctl disable firewalld ​ # 关闭selinux # 临时关闭 setenforce 0 # 修改配置文件 永久关闭 vim /etc/selinux/config SELINUXdisabled 2、配置…

【深度学习】pytorch——Autograd

笔记为自我总结整理的学习笔记&#xff0c;若有错误欢迎指出哟~ 深度学习专栏链接&#xff1a; http://t.csdnimg.cn/dscW7 pytorch——Autograd Autograd简介requires_grad计算图没有梯度追踪的张量ensor.data 、tensor.detach()非叶子节点的梯度计算图特点总结 利用Autograd实…

Transformer:开源机器学习项目,上千种预训练模型 | 开源日报 No.66

huggingface/transformers Stars: 113.5k License: Apache-2.0 这个项目是一个名为 Transformers 的开源机器学习项目&#xff0c;它提供了数千种预训练模型&#xff0c;用于在文本、视觉和音频等不同领域执行任务。该项目主要功能包括&#xff1a; 文本处理&#xff1a;支持…

【Redis】hash数据类型-常用命令

文章目录 前置知识常用命令HSETHGETHEXISTSHDELHKEYSHVALSHGETALLHMGET关于HMSETHLENHSETNXHINCRBYHINCRBYFLOAT 命令小结 前置知识 redis自身就是键值对结构了&#xff0c;哈希类型是指值本⾝⼜是⼀个键值对结构&#xff0c;形如key"key"&#xff0c;value{{field1…

面向萌新的数学建模入门指南

时间飞逝&#xff0c;我的大一建模生涯也告一段落。感谢建模路上帮助过我的学长和学姐们&#xff0c;滴水之恩当涌泉相报&#xff0c;写下这篇感想&#xff0c;希望可以给学弟学妹们一丝启发&#xff0c;也就完成我的想法了。拙劣的文笔&#xff0c;也不知道写些啥&#xff0c;…

idea必装插件EditStarters(快速引入依赖)

前言 一般来说我们要向一个 servlet 或者 Spring 项目中引入依赖都需要先到中心仓库找到对应的依赖&#xff0c;选择依赖的版本&#xff0c;把依赖添加到配置文件 pom.xml 中&#xff0c;这其实还是有点麻烦的&#xff0c;而通过 EditStarters 插件我们可以迅速的添加依赖到项目…

ElasticSearch高级功能详解与原理剖析

ES数据预处理 Ingest Node Elasticsearch 5.0后&#xff0c;引入的一种新的节点类型。默认配置下&#xff0c;每个节点都是Ingest Node&#xff1a; 具有预处理数据的能力&#xff0c;可拦截lndex或Bulk API的请求对数据进行转换&#xff0c;并重新返回给Index或Bulk APl 无…

万宾科技管网水位监测助力智慧城市的排水系统

以往如果要了解城市地下排水管网的水位变化&#xff0c;需要依靠人工巡检或者排查的方式&#xff0c;这不仅加大了人员的工作量&#xff0c;而且也为市政府带来了更多的工作难题。比如人员监管监测不到位或无法远程监控等情况&#xff0c;都会降低市政府对排水管网的管理能力&a…

自动控制原理答案

题目 现有一个单位反馈系统的开环传递函数为 试对该系统进行以下分析。 1.基础分析 计算该系统的闭环传递函数。 2.稳定性分析 2.1 使用劳斯判据分析该系统的稳定性 2.2 使用MATLAB编程&#xff0c;计算该系统有关于稳定性分析的零、极点&#xff0c;分析其稳定性。 3.暂态性…

京东数据平台:2023年Q3季度黄金市场数据分析

继9月国内黄金市场持续上涨后&#xff0c;进入10月中下旬后&#xff0c;黄金行情再度反转&#xff0c;多家品牌金饰价格再次突破600元/克&#xff0c;达到611元/克。 今年以来&#xff0c;黄金行情不断走俏&#xff0c;销售市场也有明显增长。根据鲸参谋平台的数据显示&#xf…

最受欢迎的程序员副业排行榜TOP6

程序员接单的情况并不少见&#xff0c;因为程序员职业工种的特殊性&#xff0c;能够比较快的衔接上新项目和新技术&#xff0c;所以接私活做副业成了许多程序员的不二之选。 程序员的副业是指程序员在业余时间里从事与编程相关的兼职工作&#xff0c;或者是与技术相关的创业项…

goquery库编写程序

goquery库的爬虫程序&#xff0c;该程序使用Go来爬取视频。。 package main ​ import ("fmt""net/http""net/http/httputil""io/ioutil""log""strings""golang.org/x/net/proxy""golang.org/x/n…

ACWing.第 128 场周赛 (B、C题解)

B、5286. 翻倍&#xff08;思维推导&#xff09; 一、题目要求 给定两个正整数&#xff0c;初始时两数均为 1。 你可以进行任意次&#xff08;也可以不进行&#xff09;翻倍操作&#xff0c;每次操作任选一个非负整数 k&#xff0c;令两数中的一个数乘以 k&#xff0c;另一个…

响应式项目施工装饰工程企业网站模板源码带后台

模板信息&#xff1a; 模板编号&#xff1a;647 模板编码&#xff1a;UTF8 模板颜色&#xff1a;蓝色 模板分类&#xff1a;基建、施工、地产、物业 适合行业&#xff1a;建筑施工类企业 模板介绍&#xff1a; 本模板自带eyoucms内核&#xff0c;无需再下载eyou系统&#xff…

python opencv 实现对二值化后的某一像素值做修改和mask叠加

实现对二值化后的某一像素值做修改 使用OpenCV的findNonZero函数找到所有非零&#xff08;也就是像素值为255&#xff09;的像素&#xff0c;然后遍历这些像素并修改他们的值。示例代码&#xff1a; import cv2 import numpy as np # 加载并二值化图像 img cv2.imread(…

使用 Python 进行自然语言处理第 4 部分:文本表示

一、说明 本文是在 2023 年 3 月为 WomenWhoCode 数据科学跟踪活动发表的系列文章中。早期的文章位于&#xff1a;第 1 部分&#xff08;涵盖 NLP 简介&#xff09;、第 2 部分&#xff08;涵盖 NLTK 和 SpaCy 库&#xff09;、第 2 部分&#xff08;涵盖NLTK和SpaCy库&#xf…

产品经理日常工作流程汇总

产品经理在日常的团队工作过程中&#xff0c;承担着重要的衔接作用。由于工作性质的特殊性&#xff0c;产品经理日常工作内容特别繁杂&#xff0c;导致很多产品小白刚一上手&#xff0c;会无从下手&#xff0c;经常丢三落四。这时拥有一个好的工作流程&#xff0c;很大程度上就…

C语言 用字符串比较函数cmp来做一个门禁:账号密码是否匹配 (干货满满)

#include<stdio.h> #include<string.h> void fun04() {for (int i 0; i < 3; i){char *str01 "hello";char uname[100] ;printf("请输入账号");scanf("%s",uname);char *str02 "123456";char pword[100];printf(&qu…

Chromebook文件夹应用新功能

种种迹象表明 Google 旗下的 Chromebooks 近期要有大动作了。根据 Google 团队成员透露&#xff0c;公司计划在 Chrome OS 的资源管理器中新增“Recents”&#xff08;最近使用&#xff09;文件&#xff0c;以便于用户更快找到所需要的文件。 种种迹象表明 Google 旗下的 Chro…

【移远QuecPython】EC800M物联网开发板调用网络API(使用SIM卡联网并调用高德地图API的定位坐标转换)

【移远QuecPython】EC800M物联网开发板调用网络API&#xff08;使用SIM卡联网并调用高德地图API的定位坐标转换&#xff09; 高德API使用方法&#xff1a; 文章目录 API相关配置SIM卡联网网络操作API调用 高德地图API产品介绍适用场景使用限制使用说明坐标转换 附录&#xff…