力扣-1629. 按键持续时间最长的键

简介: LeetCode 设计了一款新式键盘,正在测试其可用性。测试人员将会点击一系列键(总计 n 个),每次一个。给你一个长度为 n 的字符串 keysPressed ,其中 keysPressed[i] 表示测试序列中第 i 个被按下的键。releaseTimes 是一个升序排列的列表,其中 releaseTimes[i] 表示松开第 i 个键的时间。字符串和数组的 下标都从 0 开始 。第 0 个键在时间为 0 时被按下,接下来每个键都 恰好 在前一个键松开时被按下。测试人员想要找出按键 持续时间最长 的键。第 i 次按键的持续时间为 releaseTimes[i] - releaseTim
LeetCode 设计了一款新式键盘,正在测试其可用性。测试人员将会点击一系列键(总计 n 个),每次一个。
给你一个长度为 n 的字符串 keysPressed ,其中 keysPressed[i] 表示测试序列中第 i 个被按下的键。releaseTimes 是一个升序排列的列表,其中 releaseTimes[i] 表示松开第 i 个键的时间。字符串和数组的 下标都从 0 开始 。第 0 个键在时间为 0 时被按下,接下来每个键都 恰好 在前一个键松开时被按下。
测试人员想要找出按键 持续时间最长 的键。第 i 次按键的持续时间为 releaseTimes[i] - releaseTimes[i - 1] ,第 0 次按键的持续时间为 releaseTimes[0] 。
注意,测试期间,同一个键可以在不同时刻被多次按下,而每次的持续时间都可能不同。
请返回单次按键 持续时间最长 的键,如果有多个这样的键,则返回 按字母顺序排列最大 的那个键。

暴力法:

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> releaseTimes(5);
    releaseTimes[0] = 1;
    releaseTimes[1] = 2;
    releaseTimes[2] = 3;
    releaseTimes[3] = 4;
    releaseTimes[4] = 5;
    string keysPressed = "abcde";
    vector<int> res(releaseTimes.size());
res[0] = releaseTimes[0];

//计算releaseTimes[i] - releaseTimes[i-1]并保存
    for(int i = 1; i < releaseTimes.size(); i++){
        res[i] = releaseTimes[i] - releaseTimes[i-1];
    }
    int maxNum = res[0];
    int maxIndex = 0;
for(int i = 1; i < res.size(); i++){
//如果res中最大值存在多个,选择字符大的那一个
        if(res[i] == maxNum){
            if(keysPressed[i] > keysPressed[maxIndex]){
                maxNum = res[i];
                maxIndex = i;
                continue;
            }
        }
     //如果res中最大值存在多个,选择字符大的那一个
        if(res[i] > maxNum){
            maxNum = res[i];
            maxIndex = i;
            continue;
        }
    }
    return keysPressed[maxIndex];
}

暴力法:

可以用res保存结果releaseTimes[i]-releaseTimes[i-1];然后查找res中最大的值,maxNum保存最大值,maxIndex保存下标。

方法二:

class Solution {
public:
    char slowestKey(vector<int>& releaseTimes, string keysPressed) {
    int maxNum = releaseTimes[0];
    char maxc = keysPressed[0];
    for(int i = 1; i < releaseTimes.size(); i++){
        if(releaseTimes[i] - releaseTimes[i-1] > maxNum || (releaseTimes[i] - releaseTimes[i-1] == maxNum && maxc < keysPressed[i])){
            maxNum = releaseTimes[i] - releaseTimes[i-1];
            maxc = keysPressed[i];
            continue;
        }
    }
    return maxc;
    }
};
方法二和方法一一样的方法,都是没有定义值来存储,减少空间复杂度
目录
相关文章
|
Oracle 关系型数据库 MySQL
入职必会-开发环境搭建17-IDEA连接数据库
IntelliJ IDEA集成了众多插件,方便开发者使用,使用IDEA自带的Database模块就可以很方便的配置、连接数据库,在 IntelliJ IDEA 中连接数据库,可以按照以下步骤进行操作。
731 0
|
Prometheus 监控 Cloud Native
Prometheus结合Consul采集多个MySQL实例的监控指标
将 Prometheus 与 Consul 结合使用,实现对多个 MySQL 实例的自动发现与监控,不仅提高了监控的效率和准确性,也为管理动态扩缩容的数据库环境提供了强大的支持。通过细致配置每一部分,业务可以获得关键的性能指标和运行健康状况的即时反馈,进而优化资源配置,提高系统的稳定性和可用性。
559 3
|
2天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
253 116
|
17天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
11天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
650 220
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
886 61