力扣144A

news2024/11/28 22:49:43

文章目录

  • 1. 题目链接
  • 2. 题目代码
  • 3. 题目总结
  • 4. 代码分析

1. 题目链接

Arrival of the General

2. 题目代码

#include<iostream>
using namespace std;

int heightOfSoldier[110];

int main(){
    int numberOfSoldier;
    cin >> numberOfSoldier;

    int maxHeight = -1;
    int minHeight = 101;
    int positionOfMaxHeight;
    int positionOfMinHeight;

    for(int positionOfSoldier = 1; positionOfSoldier <= numberOfSoldier; positionOfSoldier ++){
        cin >> heightOfSoldier[positionOfSoldier];

        if(heightOfSoldier[positionOfSoldier] > maxHeight){
            maxHeight = heightOfSoldier[positionOfSoldier];
            positionOfMaxHeight = positionOfSoldier;
        }
        if(heightOfSoldier[positionOfSoldier] <= minHeight){
            minHeight = heightOfSoldier[positionOfSoldier];
            positionOfMinHeight = positionOfSoldier;
        }
    }

    if(positionOfMaxHeight == 1 && positionOfMinHeight == numberOfSoldier){
        cout << 0;
    }else{
        if(positionOfMaxHeight < positionOfMinHeight){
            cout << positionOfMaxHeight - 1 + numberOfSoldier - positionOfMinHeight;
        }else{
            cout << positionOfMaxHeight + numberOfSoldier - positionOfMinHeight - 2;
        }
    }

    return 0;
}

3. 题目总结

用时:31min
耗时原因:梳理了一下数据的移动过程,发现第二个样例不只有下述一种移动方式。总之就是,不管怎么移动,只要最后能保证最高的的在开头,最矮的在末尾就行。除此之外还应该注意,最高的和最矮的不能同时移动。

4. 代码分析

参考代码来源:
在这里插入图片描述

#include <bits/stdc++.h>
 
using namespace std;
using ll = long long;
using ull = unsigned long long;
using uint = unsigned int;
 
 
 
void solve() {
    int n;cin>>n;
    vector<int> v(n);
    for(auto&i:v)   cin >>i;
    int mx = 0,mxind = 0;
    int mn = 101,mnind = 0;
    for(int i =0;i<n;++i){
        if (v[i]>mx){mx = v[i],mxind = i;}
        if (v[i]<=mn) mn = v[i],mnind =i;
    }
    cout<< mxind + n-1-mnind -(mxind>mnind?1:0);
}
 
 
int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    solve();
}

我的代码耗时:124ms
内存占用:0KB

两端代码运行时间上存在差异的原因(回复来自gpt):
输入/输出效率
              参考代码:使用 cin 进行输入,使用 cout 进行输出。它还通过 ios::sync_with_stdio(false) 关闭了与 stdio 的同步,以便进行更快的输入输出操作。
              我的代码:同样使用 cincout,但没有显式地管理输入输出的同步。
              差异:参考代码显式地管理了输入输出的同步,并且利用向量操作效率高,这样可以减少多次输入输出操作的开销。这使得参考代码通常比我的代码更快,特别是在处理较大输入时更为显著。
数据结构和访问模式
              参考代码:使用向量存储士兵的身高,并直接访问向量元素(v[i]),由于内存连续访问和潜在的编译器优化,这是高效的。
              我的代码:使用固定大小的数组(heightOfSoldier),并通过索引访问元素(heightOfSoldier[positionOfSoldier])。数组访问通常比向量访问稍快,因为内存管理更简单(无需动态调整大小)。
              差异:虽然两段代码都使用数组(参考代码使用向量),但参考代码中向量的使用可能被编译器或标准库实现更好地优化,从而提高性能。
控制流和分支逻辑
              两段代码都涉及查找士兵身高的最大值和最小值的类似逻辑。然而,参考代码中计算结果的逻辑(mxind + n - 1 - mnind - (mxind > mnind ? 1 : 0))可能在分支逻辑上更为优化。
              差异:参考代码中的分支逻辑(mxind > mnind ? 1 : 0)比我的代码中的条件检查(positionOfMaxHeight < positionOfMinHeight)更为简单直接,这可能更容易让编译器进行优化。
              总结来说,参考代码通常由于更高效的输入输出处理、向量操作的优化以及更简洁的分支逻辑,而表现更好。这些优化共同导致参考代码在运行时相比我的代码更为快速,特别是在处理较大输入时表现更为明显。

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

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

相关文章

IT入门知识第七部分《移动开发》(7/10)

目录 第七部分&#xff1a;移动开发 —— 触手可及的未来 引言 1. 移动开发平台 1.1 Android 1.2 iOS 2. 跨平台开发 2.1 React Native 2.2 Flutter 3.移动开发的重要性 3.1 用户体验 3.2 可访问性 3.3 市场机会 4.移动开发面临的挑战 4.1 设备多样性 4.2 系统更…

【uni-app学习手札】

uni-app&#xff08;vue3&#xff09;编写微信小程序 编写uni-app不必拘泥于HBuilder-X编辑器&#xff0c;可用vscode进行编写&#xff0c;在《微信开发者工具》中进行热加载预览&#xff0c; 主要记录使用uni-app过程中自我备忘一些api跟语法&#xff0c;方便以后编写查找使用…

HTML静态网页成品作业(HTML+CSS)——手机电子商城网页(4个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有4个页面。 二、作品演示 三、代…

前端vue实战项目结构、常用编辑器vs code 配置

5.Complete JSDoc Tags 6.Custom CSS and JS Loader 7.Debugger for Chrome 8.EditorConfig for VS Code 9.ESLint ☆☆☆ 10.gitignore 11.GitLens — Git supercharged 12.npm 13.PostCSS syntax !important 14.Vetur ☆ 15.vscode-icons 16.vue-i18n 17.Markdow…

【C语言】排序算法 -------- 计数排序

个人主页 创作不易&#xff0c;感谢大家的关注&#xff01; 文章目录 1. 计数排序的概念2. 计数排序使用场景3. 计数排序思想4. 计数排序实现过程5. 计数排序的效率6. 总结&#xff08;附源代码&#xff09; 1. 计数排序的概念 计数排序是一种非比较的排序算法&#xff0c;其…

雷达标定与解析

融合雷达与解析雷达数据的相关代码。感谢开源社区的贡献。以下代码继承了很多人的工作。 如果是单雷达&#xff1a; 直接进行标定&#xff0c;所以就是接收相关的话题然后发布。 lidar_calibration_params.yaml&#xff1a; calibration:在这个接口里面x_offset: 0.0y_offset:…

前端 CSS 经典:clip-path 裁剪

前言&#xff1a;clip-path 可以把一个元素裁剪成任意你想要的形状。clip-path 裁剪路径生成器&#xff0c;通过改变数值&#xff0c;还可以做出有趣的动画。 效果&#xff1a; 代码实现&#xff1a; <!DOCTYPE html> <html lang"en"><head><…

创新实训2024.06.17日志:大模型微调总结

前段时间其实我们已经部署了大模型&#xff0c;并开放了对外的web接口。不过由于之前某几轮微调实验的大模型在对话时会有异常表现&#xff08;例如响应难以被理解&#xff09;&#xff0c;因此我在项目上线后&#xff0c;监控了数据库里存储的对话记录。确定了最近一段时间部署…

『 Linux 』 进程间通信概述

文章目录 什么是进程间通信为什么要有进程间通信如何进行进程间通信 什么是进程间通信 进程间通信(IPC)指的是在操作系统重,允许两个或者多个进程之间传递信息或者数据的机制; 进程是操作系统重独立运行的实体,即进程间具有独立性,存在自己的地址空间; 因此进程间默认无法直接访…

多模块开发

简介 Git 通过子模块来解决复用模块的问题。 submodule允许你将一个 Git 仓库作为另一个 Git 仓库的子目录。 它能让你将另一个仓库克隆到自己的项目中&#xff0c;同时还保持提交的独立。而subtree可以将子模块合并到主模块由主模块完全管理。 git subModule Git地址&#…

MySQL----利用Mycat配置读写分离

首先确保主从复制是正常的&#xff0c;具体步骤在MySQL----配置主从复制。MySQL----配置主从复制 环境 master(CtenOS7)&#xff1a;192.168.200.131 ----ifconfig查看->ens33->inetslave(win10)&#xff1a;192.168.207.52 ----ipconfig查看->无线局域网适配器 WLA…

RabbitMQ 开发指南

连接RabbitMQ 连接方式一&#xff1a; 也可以选择使用URI的方式来实现 连接方式二&#xff1a; Connection接口被用来创建一个Channel&#xff0c;在创建之后&#xff0c;Channel可以用来发送或者接收消息。 Channel channel conn.createChannel();使用交换器和队列 声明…

React 中的服务器渲染组件

在前后分离架构以前&#xff0c;所有的 Html 业务都是后端渲染&#xff0c;返回前前端显示&#xff0c;后端渲染把前后端逻辑耦合在一起&#xff0c;增大系统的复杂度&#xff0c;不易于扩展。React 中的 Server组件&#xff0c;准确的说是服务器进行渲染&#xff0c;无论是什么…

物联网边缘网关在物联网应用中有哪些优势?天拓四方

随着物联网技术的快速发展&#xff0c;越来越多的设备接入网络&#xff0c;数据交互日益频繁&#xff0c;对数据处理和传输的要求也越来越高。在这样的背景下&#xff0c;物联网边缘网关应运而生&#xff0c;以其低延迟、减少带宽消耗、提高数据质量和安全性等优势&#xff0c;…

小林图解系统-三、操作系统结构

Linux 内核 vs Windows 内核 内核 作为应用连接硬件设备的桥梁&#xff0c;保证应用程序只需要关心与内核交互&#xff0c;不需要关心硬件的细节 内核具备四个基本能力&#xff1a; 管理进程、线程&#xff0c;决定哪个进程、线程使用CPU&#xff0c;也就是进程调度的能力&a…

ArcGIS查找相同图斑、删除重复图斑

​ 点击下方全系列课程学习 点击学习—>ArcGIS全系列实战视频教程——9个单一课程组合系列直播回放 点击学习——>遥感影像综合处理4大遥感软件ArcGISENVIErdaseCognition 这次是上次 今天分享一下&#xff0c;很重要却被大家忽略的两个工具 这两个工具不仅可以找出属性…

【总线】AXI4第二课时:深入AXI4总线的基础事务

大家好,欢迎来到今天的总线学习时间!如果你对电子设计、特别是FPGA和SoC设计感兴趣&#xff0c;那你绝对不能错过我们今天的主角——AXI4总线。作为ARM公司AMBA总线家族中的佼佼者&#xff0c;AXI4以其高性能和高度可扩展性&#xff0c;成为了现代电子系统中不可或缺的通信桥梁…

PHP转Go系列 | 条件循环的使用姿势

大家好&#xff0c;我是码农先森。 条件 在 PHP 语言中条件控制语句&#xff0c;主要有 if、elseif、else 和 switch 语句 // if、elseif、else 语句 $word "a"; if ($word "a") {echo "a"; } elseif ($word "b") {echo "b&…

【论文笔记】LoRA LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS

题目&#xff1a;LoRA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS 来源: ICLR 2022 模型名称: LoRA 论文链接: https://arxiv.org/abs/2106.09685 项目链接: https://github.com/microsoft/LoRA 文章目录 摘要引言问题定义现有方法的问题方法将 LORA 应用于 Transformer 实…

无源编缆测尺助力料场实现自动化堆取料作业

随着工业4.0时代的到来&#xff0c;智能化、无人化成为现代工业发展的重要趋势。在港口码头、钢铁冶金、焦化等高耗能行业中&#xff0c;如何实现物料的精准测量与无人化操作&#xff0c;成为企业提高生产效率、降低人工成本的关键。武汉市微深节能科技有限公司凭借其先进的分段…