算法的时间复杂度分析习题专题

之前写了一篇重点是讲理论,今天重点在于对于题目的分析

题目难度不分先后,有题目来源会直接给出链接或者位置

第一题:消失的数字

题目来源:LeetCode消失的数字

 分析

第一种思路分析:

         参考代码:

#include <cstdio>
#include <algorithm>using namespace std;int find_disappear(int nums[], int len)
{int res = -1;//保存结果,-1代表值没有被改变//先对数组进行排序sort(nums, nums + len);//需要两个参数,数组头指针与指针,但是这里不包括尾指针,所以指向数组越界的位置for (int i = 0; i < len; i++){if (i != nums[i]) {//这里直接缺少的就是ires = i;}}//这里就是没有匹配到的情况,就是最大的索引if (res ==  -1) {res = len;}  return res;
}int main()
{int arr[] = {0, 1, 2};//这里长度要单独拿出来计算,因为arr传入到find函数里面,会直接当成一级指针来进行处理//指针一般也就是一般windows上4个字节,linux上八个字节来进行处理int len = sizeof(arr) / sizeof(arr[0]);int res = find_disappear(arr, len);printf("缺失的数字是:%d\n", res);return 0;
}

时间复杂度为O(nlogn)明显与题目要求不符合,no_pass

下面是第二种思路分析

#include <cstdio>int find_number(int *nums, int len)
{//正确的长度是int len_correct = len + 1;//计算正确求和值int sum_correct = (len_correct * (len_correct - 1)) / 2;int sum_wrong = 0;//非正确的求和值	//开始轮替,计算非正确的值,然后相减for (int i = 0; i < len; i++){sum_wrong += nums[i];//因为i本身就是从0开始的,所以用i来累加求和}return sum_correct - sum_wrong;
}int main()
{int arr[] = {0, 1, 3};int res = find_number(arr,3);printf("%d\n", res);return 0;
}

时间度O(n),通过

leetcode提交代码:

class Solution {
public:int missingNumber(std::vector<int>& nums) {int len_correct = nums.size() + 1;int sum_correct = (len_correct * (len_correct - 1)) / 2;int sum_wrong = 0;for (int i = 0; i < nums.size(); ++i) {sum_wrong += nums[i];}return sum_correct - sum_wrong;}
};

 

java代码的实现

java小知识点补讲:

1.一个类中的静态方法在new一个非静态成员成员内部类的时候,成员内部类必须是static的  

也就是说下面这种写法是错误的

应该换成下面这种写法

 如果你实在想内部类不设置为static的,那么,也可以按照如下方式来做

说一下原因:main是一个静态方法,也就是说它是先对对象而存在的,如果Solution是一个依赖于Lc对象才存在的对象,那么如果直接new Solution肯定是不行的,因为Lc这个类都没有被加载到内存里面来,也就是说,这个类在内存里面是没有空间的,Lc没有空间,那么它的内部类 Solution凭什么会有空间。另外说一句,类加载到方法区是不一定会去创建这个类的实例的,他只会把类的相关信息封存起来放到一个Class<相关类>的一个字节码对象里面

说一下上面的类加载到方法区的机制

下面看具体的代码:

public class Lc {static class Solution {public int missingNumber(int[] nums) {//先求出正确的和int correct_len = nums.length + 1;int correct_sum = correct_len * (correct_len - 1) / 2;int wrong_sum = 0;//保留不正确的和for (int i = 0; i < nums.length; i++) {wrong_sum += nums[i];}return correct_sum - wrong_sum;}}public static void main(String []args) {int[] nums = {3, 0, 1};Solution solution = new Solution();int res = solution.missingNumber(nums);System.out.println(res);}
}

 上面代码自行提交,具体逻辑分析看上面c++代码分析,

持续更新中。。。。。。

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

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

相关文章

Git与Repo:开源开发的得力工具组合

Git与Repo&#xff1a;开源开发的得力工具组合 1. 引言 开源开发在当今的软件行业中扮演着至关重要的角色。它不仅推动了技术的创新和进步&#xff0c;也促进了开发者之间的合作与共享。随着越来越多的开源项目的涌现&#xff0c;有效的代码管理和版本控制成为了必不可少的工…

Elasticsearch基础篇(三):Elasticsearch7.x的集群部署

Elasticsearch的集群部署 1. Elasticsearch集群架构主节点数据节点客户端节点分片节点间通信集群状态 2. Elasticsearch集群部署2.1 系统配置修改2.1.1 修改文件句柄数和线程数2.1.2 修改虚拟内存2.1.3 关闭交换空间&#xff08;Swap&#xff09; 2.2 下载es数据库并上传到服务…

STM32 定时器介绍--通用、高级定时器

目录 高级定时器 1.功能框图 1-时钟源 2-时基单元 3-输入捕获 4-输出比较 2.输入捕获的应用 3.输出比较的应用 4.初始化结构体 1-时基初始化结构体 2-输出比较结构体 3-PWM信号 周期和占空比的计算--以通用定时器为例 4-输入捕获结构体 5-断路和死区初始化结构体…

Linux 处理文件( touch 命令、cp 命令、mv 命令、rm 命令)

Linux 处理文件 创建文件&#xff08; touch 命令&#xff09;&#xff0c;复制文件&#xff08; cp 命令&#xff09;&#xff0c;重命名文件&#xff08; mv 命令&#xff09;&#xff0c;删除文件&#xff08;rm 命令&#xff09; 文章目录 Linux 处理文件一、创建文件&…

Xcode 超简单实用小秘技让撸码进入新境界

概览 Xcode 是开发  应用不可或缺的王牌主力军&#xff0c;虽然 Xcode 中一些常用使用姿势想必大家都已驾轻就熟&#xff0c;但其中仍有一些隐藏宝藏小技巧不为人知。 充分挖掘它们可以极大加速和方便秃头码农们日常的撸码行为。 一般的&#xff0c;它们分为两类&#xff…

Anaconda Jupyter

&#x1f64c;秋名山码民的主页 &#x1f602;oi退役选手&#xff0c;Java、大数据、单片机、IoT均有所涉猎&#xff0c;热爱技术&#xff0c;技术无罪 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; 获取源码&#xff0c;添加WX 目录 前言An…

idea环境下如何打包可运行jar?

工作中有时候偶尔写一些工具类、小程序&#xff0c;可是java程序员制作一个可运行jar实在折腾&#xff0c;利用idea开发环境&#xff0c;可以快速打包自己的可运行jar。具体怎么操作呢&#xff1f; 创建一个空白的java项目并完成自己的程序开发 完成java代码&#xff1a; /**…

B. Comparison String

题目&#xff1a; 样例&#xff1a; 输入 4 4 <<>> 4 >><< 5 >>>>> 7 <><><><输出 3 3 6 2 思路&#xff1a; 由题意&#xff0c;条件是 又因为要使用尽可能少的数字&#xff0c;这是一道贪心题&#xff0c;所以…

(搞定)排序数据结构(1)插入排序 选择排序+冒泡排序

目录 本章内容如下 一:插入排序 1.1插入排序 1.2希尔排序 二&#xff1a;选择排序 2.1选择排序 三:交换排序 3.1冒泡排序 一:插入排序 1.1直接插入排序 说到排序&#xff0c;其实在我们生活中非常常见&…

VisionTransformer(ViT)详细架构图

这是原版的架构图&#xff0c;少了很多东西。 这是我根据源码总结出来的详细版 有几点需要说明的&#xff0c;看架构图能看懂就不用看注释了。 &#xff08;1&#xff09;输入图片必须是 224x224x3 的&#xff0c;如果不是就把它缩放到这个尺寸。 &#xff08;2&#xff09;T…

PHP生成二维码带图标代码实例

PHP生成二维码带图标代码实例&#xff08;PHP QR Code二维码生成类库&#xff09; public static function png($text, $outfilefalse, $levelQR_ECLEVEL_L, $size3, $margin4, $saveandprintfalse) { $enc QRencode::factory($level, $size, $margin); return $enc->…

Bee2.1.8支持Spring Boot 3.0.11,active命令行选择多环境,多表查改增删(bee-spring-boot发布,更新maven)

天下大势&#xff0c;分久必合&#xff01; Hibernate/MyBatis plus Sharding JDBC Jpa Spring data GraphQL App ORM (Android, 鸿蒙) Bee Spring Cloud 微服务使用数据库更方便&#xff1a;Bee Spring Boot; 轻松支持多数据源&#xff0c;Sharding, Mongodb. 要整合一堆的…

简历项目优化关键方法论-START

START方法论是非常著名的面试法则&#xff0c;经常被面试官使用的工具 Situation:情况、事情、项目需求是在什么情况下发生Task:任务&#xff0c;你负责的做的是什么Action:动作&#xff0c;针对这样的情况分析&#xff0c;你采用了什么行动方式Result:结果&#xff0c;在这样…

【接口技术】总线课堂习题

1&#xff1a;CPU在执行OUT DX, AL指令时&#xff0c;&#xff08;&#xff09;寄存器的内容送到地址总线上 A&#xff0c;DL B&#xff0c;DX C&#xff0c;AX D&#xff0c;DL 解答&#xff1a;B out指令是把AL的数据输出到DX的端口&#xff0c;因此AL寄存器的内容送到…

uniapp app 导出excel 表格

直接复制运行 <template><view><button click"tableToExcel">导出一个表来看</button><view>{{ successTip }}</view></view> </template><script>export default {data() {return {successTip: }},metho…

Unity把UGUI再World模式下显示到相机最前方

Unity把UGUI再World模式下显示到相机最前方 通过脚本修改Shader 再VR里有时候要把3D的UI显示到相机最前方&#xff0c;加个UI相机会坏事&#xff0c;可以通过修改unity_GUIZTestMode来解决。 测试用例 测试用例如下&#xff1a; 场景包含一个红色的盒子&#xff0c;一个UI…

Linux作业2

Linux中的 stdin 、stderr、stdout分别是什么意思 在 Linux 中&#xff0c;stdin、stdout 和 stderr 是标准的输入、标准的输出和标准的错误的缩写&#xff0c;它们是与终端相关联的默认文件描述符&#xff0c;用于处理输入和输出。以下是它们的详细含义&#xff1a; stdin&am…

Java类与对象

文章目录 引出概念快速入门对象内存布局属性概念创建对象访问属性对象分配机制成员方法&#x1f996;注意事项和细节 引出 ●看一个养猫猫问题 张老太养了两只猫猫: 一只名字叫小白, 今年3岁, 白色. 还有一只叫小花, 今年100岁, 花色. 请编写一个程序, 当用户输入小猫的名字时…

zookeeper mac安装

目录 1.下载zookeeper安装包 2.解压安装包 3.修改配置文件 4.启动服务端 5.启动客户端 这边工作中用到了zookeeper组件&#xff0c;但自己独立安装弄的不太多&#xff0c;这边本机mac装一个做测试使用 以下是安装记录&#xff0c;可以作为参考 从以下链接zookeeper版本列…

当面试被问到jvm(Java虚拟机)时,如何将面试官引入自己的节奏?

本文目录 前言快问快答抛砖引玉锦上添花好书推荐总结 前言 作为一名Java开发工程师&#xff0c;不管是校招还是社招jvm一定是必问必会的知识点。虽然说真正开发中用到的不多&#xff0c;甚至可以说用不到&#xff08;对于刚入行或者Java初级&#xff09;&#xff0c;但是当面试…