力扣144A

文章目录

  • 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)更为简单直接,这可能更容易让编译器进行优化。
              总结来说,参考代码通常由于更高效的输入输出处理、向量操作的优化以及更简洁的分支逻辑,而表现更好。这些优化共同导致参考代码在运行时相比我的代码更为快速,特别是在处理较大输入时表现更为明显。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DataOps真能“降本增效”?

在各行各业中&#xff0c;越来越多的公司开始重视收集数据&#xff0c;并寻找创新方法来获得真实可行的商业成果&#xff0c;并且愿意投入大量时间和金钱来实现这一目标。 据IDC称&#xff0c;数据和分析软件及云服务市场规模在 2021 年达到了 900 亿美元&#xff0c;随着企业继…

“华住订房,用友入账”,YonSuite助力企业“降低成本”再进一步

在当今这个数字化、全球化的时代&#xff0c;企业对于商旅管理的需求愈发迫切。如何在保证员工出差体验的同时&#xff0c;实现成本的优化与管控&#xff0c;成为许多企业关注的焦点。YonSuite商旅费控作为一站式商旅解决方案&#xff0c;携手华住商旅&#xff0c;共同为企业提…

33.获取入口点

上一个内容&#xff1a;32.双击列表启动目标游戏 前置知识 25.入口点注入&#xff08;查看pe头&#xff09;、32.双击列表启动目标游戏 以它的代码为基础进行修改 效果图&#xff1a; 代码实现&#xff1a;原理通过读文件流的方式把文件加载到内存中然后解析pe结构 void CWnd…

gunicorn超时报错[CRITICAL] WORKER TIMEOUT

一. 问题描述 2024-06-18T08:40:39.858804039Z [2024-06-18 08:40:39 0000] [1] [CRITICAL] WORKER TIMEOUT (pid:332) 2024-06-18T08:40:40.918093090Z [2024-06-18 08:40:40 0000] [1] [ERROR] Worker (pid:332) was sent SIGKILL! Perhaps out of memory?二. 原因分析 从…

2024年一建报名汇总和常见问题答疑!

2024年一级建造师报名通知全国32个地区均已发布&#xff0c;考试100汇总如下&#xff0c;大家务必及时报名&#xff0c;千万不要错过&#xff01; ​ 报名问题 01、时间不多了&#xff0c;今年可以先考部分学科吗&#xff1f;分两年考完&#xff1f; 可以的&#xff0c;一建…

Day1:基础语法

今日目标&#xff1a;理解什么是变量、掌握常用的数据类型、学会数据类型转换 一、JavaScript 介绍 1. JavaScript 基础知识 主要讲解 &#xff1a;JavaScript 是什么、书写位置、注释、结束符、输入和输出语法、字面量。 1.1 JavaScript 是什么 是一种运行在客户端(浏览器…

企业该如何防查盗版?如何防软件后台泄密数据?

随着信息化的发展&#xff0c;企业日常办公越来越依赖互联网。终端以及普通PC终端在访问互联网过程中&#xff0c;会遇到各种各样不容忽视的风险&#xff0c;例如员工主动故意的数据泄漏&#xff0c;后台应用程序偷偷向外部发信息&#xff0c;木马间谍软件的外联&#xff0c;以…

RISC_CPU模块的调试

代码&#xff1a; cpu.v include "clk_gen.v" include "accum.v" include "adr.v" include "alu.v" include "machine.v" include "counter.v" include "machinectl.v" include "register.v&quo…

备忘录模式(大话设计模式)C/C++版本

备忘录模式 C #include <iostream> #include <string> using namespace std;// Memento类&#xff0c;备忘录&#xff0c;此处为角色状态存储箱 class RoleStateMemento { private:int m_vit; // 生命力int m_atk; // 攻击力int m_def; // 防御力 public:RoleStat…

基于51单片机的篮球计分器设计

一.硬件方案 本设计用由AT89C51编程控制LED七段数码管作显示的球赛计时计分系统。该系统具有赛程定时设置、赛程时间暂停、及时刷新甲乙双方的成绩等功能。 电路主要由STC89C52单片机最小系统数码管显示模块数码管驱动模块蜂鸣器模块按键模块&#xff1b; 二.设计功能 &…

为什么有人认为Linux不如macOS?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「Linux的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;首先要明确你说的是哪个Lin…

Zynq学习笔记--了解中断配置方式

目录 1. 简介 2. 工程与代码解析 2.1 Vivado 工程 2.2 Vitis 裸机代码 2.3 关键代码解析 3. 总结 1. 简介 Zynq 中的中断可以分为以下几种类型&#xff1a; 软件中断&#xff08;Software Generated Interrupt, SGI&#xff09;&#xff1a;由软件触发&#xff0c;通常…

Python学习笔记15:进阶篇(四)文件的读写。

文件操作 学习编程操作中&#xff0c;我觉得文件操作是必不可少的一部分。不管是读书的时候学习的c&#xff0c;c&#xff0c;工作的前学的java&#xff0c;现在学的Python&#xff0c;没学过的php和go&#xff0c;都有文件操作的模块以及库的支持&#xff0c;重要性毫无疑问。…

【因果推断python】45_估计量1

目录 问题设置 目标转换 到目前为止&#xff0c;我们已经了解了如何在干预不是随机分配的情况下对我们的数据进行纠偏&#xff0c;这会导致混淆偏差。这有助于我们解决因果推理中的识别问题。换句话说&#xff0c;一旦单位是可交换的&#xff0c;或者 &#xff0c;就可以学习…

AI绘画ComfyUI-插件-面部修复,快速入门安装使用!

这期给大家分享一个插件AI绘画 ComfyUI的——Impact Pack ComfyUI也是隶属于Stable Diffusion的工作流形式的AI绘画工具。 这是一个综合节点&#xff0c;这期先介绍下这个插件中的面部修复功能 Impact Pack插件 1、下载插件 在ComfyUI管理器中安装节点&#xff0c;搜索Imp…

[信号与系统]傅里叶变换、卷积定理、和为什么时域的卷积等于频域相乘。

前言 最近学习以下IIR滤波器和FIR滤波器 前置 1. 时域和频域 时域和频域代表着频率和时间与振幅的一一对应关系 2. 卷积运算 关于卷积的定义&#xff0c;详情请看 这篇文章能让你明白卷积 卷积运算是一种数学运算&#xff0c;广泛应用于信号处理、图像处理、控制系统和概…

Unity和UE免费领恐怖书本头怪兽角色模型恐怖或奇幻游戏monster适合FPS类型PBR202406202143

Unity和UE免费领恐怖书本头怪兽角色模型恐怖或奇幻游戏monster适合FPS类型PBR202406202143 Unity恐怖书本头怪兽角色模型&#xff1a;https://prf.hn/l/zpBqgVl UE恐怖书本头怪兽角色模型&#xff1a;https://prf.hn/l/4PzY1Qy 作者其他资产&#xff1a;https://prf.hn/l/0…

RX8025/INS5T8025实时时钟-国产兼容RS4TC8025

该模块是一个符合I2C总线接口的实时时钟&#xff0c;包括一个32.768 kHz的DTCXO。 除了提供日历&#xff08;年、月、日、日、时、分、秒&#xff09;功能和时钟计数器功能外&#xff0c;该模块还提供了大量其他功能&#xff0c;包括报警功能、唤醒定时器功能、时间更新中断功能…

深入理解和实现Windows进程间通信(管道)

进程间通信&#xff08;IPC&#xff0c;Inter-Process Communication&#xff09;是指在不同进程之间的数据传输。进程是操作系统分配资源和调度的独立单位&#xff0c;每个进程都有自己独立的地址空间&#xff0c;一个进程无法直接访问另一个进程的数据。因此&#xff0c;当需…

深度解析RocketMq源码-持久化组件(四) CommitLog

1.绪论 commitLog是rocketmq存储的核心&#xff0c;前面我们介绍了mappedfile、mappedfilequeue、刷盘策略&#xff0c;其实commitlog的核心组件我们基本上已经介绍完成。 2.commitLog的组成 commitLog的核心其实就是MqppedFilequeue&#xff0c;它本质上就是多个mappedFile…