【刷题记录】——时间复杂度

本系列博客为个人刷题思路分享,有需要借鉴即可。

1.目录大纲:
在这里插入图片描述

2.题目链接:
T1:消失的数字:LINK
T2:旋转数组:LINK

3.详解思路:

T1:
在这里插入图片描述
思路1:先排序,再与正常的数字相比较即可。
在这里插入图片描述

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdlib.h>
#include<stdio.h>int int_cmp(const void* e1,const void* e2)
{return *(int*)e1 - *(int*)e2;
}int missingNumber(int* nums, int numsSize) 
{//先排序qsort(nums,numsSize,sizeof(int),int_cmp);//生成正常的数组与之比较int i = 0;int lose = 0;for (i = 0; i < numsSize+1; i++){if (i != nums[i]){lose = i;break;}}return lose;
}int main()
{int arr[9] = { 9,6,4,2,3,5,7,0,1 };int ret = missingNumber(arr, sizeof(arr)/sizeof(arr[0]));printf("%d\n", ret);return 0;
}

思路2:先把正常数组数字全部加起来,然后减去原数组的数字
在这里插入图片描述

int missingNumber(int* nums, int numsSize){//思路二:先加起来然后减去,即可得到消失的数字
int i = 0;
int lose = 0;
int sum = 0;
//加上0到numsSize全部的数字
for(i = 0;i<numsSize+1;i++)
{sum+=i;
}
//减去原数组0到numsSize的数字
for(i = 0;i<numsSize;i++)
{sum-=nums[i];
}
//得到消失的数字
lose = sum;
return lose;
}

思路3:异或运算
前提知识:
0 ^ X = X;//任何数字跟0异或都是原来的数
X ^ X = 0;//两个一样的数字进行异或得到的是0
X ^ Y ^ X = Y;//异或操作满足交换律
在这里插入图片描述

int missingNumber(int* nums, int numsSize){// //思路二:先加起来然后减去,即可得到消失的数字
// int i = 0;
// int lose = 0;
// int sum = 0;
// //加上0到numsSize全部的数字
// for(i = 0;i<numsSize+1;i++)
// {
//     sum+=i;
// }
// //减去原数组0到numsSize的数字
// for(i = 0;i<numsSize;i++)
// {
//     sum-=nums[i];
// }
// //得到消失的数字
// lose = sum;
// return lose;//思路三:异或操作
int i = 0;
int lose = 0;
//异或正常的数组
for(i = 0;i<numsSize+1;i++)
{lose^=i;
}
//异或原来的数组
for(i = 0;i<numsSize;i++)
{lose^=nums[i];
}
//返回
return lose;
}

T2:
在这里插入图片描述
思路1:借助一个变量一个一个挪动
在这里插入图片描述

void rotate(int* nums, int numsSize, int k) {int temp = 0;int i = 0;//旋转几次while (k--){//开始第一组挪动temp = nums[numsSize - 1];//先把最后一个数字放到临时变量中for (i = numsSize - 2; i >= 0; i--){nums[i+1] = nums[i];}//挪动数组往前一位nums[0] = temp;//把临时变量中的值放到数组第一个}
}int main()
{int arr[7] = { 1,2,3,4,5,6,7 };rotate(arr,7,3);int i = 0;for (i = 0; i < 7; i++){printf("%d ", arr[i]);}return 0;
}

思路2:一步到位,拷贝法
在这里插入图片描述

void rotate(int* nums, int numsSize, int k) {if(k>numsSize)k%=numsSize;//新数组,拷贝int arr[numsSize];int i = 0;for(i = 0;i<numsSize;i++){arr[i] = nums[i];}//覆盖原数组内容for(i = 0;i<k;i++){nums[k-1-i] = arr[numsSize-1-i];}for(i = 0;i<numsSize-k;i++){nums[k+i] = arr[i];}
}

思路3:逆置
在这里插入图片描述

void Reverse(int* nums,int left,int right){while(left<right){nums[left] = nums[left]^nums[right];nums[right] = nums[left]^nums[right];nums[left] = nums[left]^nums[right];left++;right--;}}void rotate(int* nums, int numsSize, int k) {if(k>numsSize)k%=numsSize;//逆置前半部分Reverse(nums,0,numsSize-k-1);//逆置后半部分    4         6Reverse(nums,numsSize-k,numsSize-1);//逆置整体Reverse(nums,0,numsSize-1);}

完。

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

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

相关文章

08:K8S资源对象管理|服务与负载均衡|Ingress

K8S资源对象管理&#xff5c;服务与负载均衡&#xff5c;Ingress DaemonSet控制器污点策略容忍容忍污点 其他资源对象Job资源对象 有限生命周期CronJob资源对象 集群服务服务自动发现headless服务 实现服务定位与查找 服务类型 Ingress插件 发布服务的方式 DaemonSet控制器 Da…

Vulnhub靶机:DC2

一、介绍 运行环境&#xff1a;Virtualbox 攻击机&#xff1a;kali&#xff08;10.0.2.15&#xff09; 靶机&#xff1a;DC2&#xff08;10.0.2.55&#xff09; 目标&#xff1a;获取靶机root权限和flag 靶机下载地址&#xff1a;https://www.vulnhub.com/entry/dc-2,311/…

L2-001 紧急救援

一、题目 二、解题思路 迪杰斯特拉算法。求最短路径的条数&#xff1a;在更新T时&#xff0c;如果是 dis[j]>dis[index]map[index][j] &#xff0c;则 cot[j]cot[index] &#xff0c;如果是 dis[j]dis[index]map[index][j] &#xff0c;则 cot[j]cot[index] 。递归输出最短…

RestFul的认识

前言 RESTful 是 Representational State Transfer 的缩写&#xff0c;是一种软件架构风格&#xff0c;用于在网络上构建和整合应用程序。它基于 HTTP 协议&#xff0c;并定义了一组约束和规范&#xff0c;用于规范客户端和服务器之间的通信。 RESTful API 是遵循 REST 架构规…

Tied Block Convolution: 具有共享较薄滤波器的更简洁、更出色的CNN

摘要 https://arxiv.org/pdf/2009.12021.pdf 卷积是卷积神经网络&#xff08;CNN&#xff09;的主要构建块。我们观察到&#xff0c;随着通道数的增加&#xff0c;优化后的CNN通常具有高度相关的滤波器&#xff0c;这降低了特征表示的表达力。我们提出了Tied Block Convolutio…

InternLM大模型实战-6.OpenCompass大模型评测

文章目录 前言笔记正文关于模型评测的三个问题为什么需要评测我们需要测什么怎么测试大语言模型 主流大模型评测框架OpenCompass大模型评测领域的挑战 前言 本文是对于InternLM全链路开源体系系列课程的学习笔记。【OpenCompass 大模型评测】 https://www.bilibili.com/video/…

软件测试 - 测试用例设计方法之等价类划分和边界值分析

1. 等价类划分法 1.1 基本理论 等价类划分法是通过科学的方法找到具有共同特性的测试输入的集合&#xff0c;避免进行穷举测试&#xff0c;大大减少了测试用例的数量&#xff0c;从而提高测试效率。等价类划分法的典型应用场景就是输入框&#xff0c;适用于较少数量输入框的场…

LeetCode 0987.二叉树的垂序遍历:遍历时存节点信息,遍历完自定义排序

【LetMeFly】987.二叉树的垂序遍历&#xff1a;遍历时存节点信息&#xff0c;遍历完自定义排序 力扣题目链接&#xff1a;https://leetcode.cn/problems/vertical-order-traversal-of-a-binary-tree/ 给你二叉树的根结点 root &#xff0c;请你设计算法计算二叉树的 垂序遍历…

《Linux 简易速速上手小册》第7章: 网络配置与管理(2024 最新版)

文章目录 7.1 Linux 网络基础7.1.1 重点基础知识7.1.2 重点案例&#xff1a;配置静态 IP 地址7.1.3 拓展案例 1&#xff1a;使用 nmcli 配置网络&#xff08;适用于 Fedora/CentOS&#xff09;7.1.4 拓展案例 2&#xff1a;配置无线网络连接 7.2 静态与动态 IP 配置7.2.1 重点基…

Java学习18-- Override方法重写【★】

重点&#xff1a;super类 & 方法重写 ★看不明白多看几遍&#xff0c;记住static优先级>>高于override 重写Override methods★ 重写Override&#xff1a;child class可以覆盖father class中的method&#xff0c;即子类child class和父类father class有相同名称、…

【Java程序设计】【C00252】基于Springboot的实习管理系统(有论文)

基于Springboot的实习管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的实习管理系统 本系统分为前台功能模块、管理员功能模块、教师功能模块、学生功能模块以及实习单位功能模块。 前台功能模块&#xf…

洛谷: [CSP-J 2023] 小苹果

题目描述 小 Y 的桌子上放着 n n n 个苹果从左到右排成一列&#xff0c;编号为从 1 1 1 到 n n n。 小苞是小 Y 的好朋友&#xff0c;每天她都会从中拿走一些苹果。 每天在拿的时候&#xff0c;小苞都是从左侧第 1 1 1 个苹果开始、每隔 2 2 2 个苹果拿走 1 1 1 个苹果…