2022-1-10力扣每日一题 1629. 按键持续时间最长的键

本文介绍了一种算法,用于找出在一系列按键操作中,持续时间最长的键。通过遍历按键时间和对应的键值,该算法能够确定哪个键被按下的时间最长。若存在多个键持续时间相同,则选择ASCII值最大的键。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1629. 按键持续时间最长的键

class Solution {
    public char slowestKey(int[] releaseTimes, String keysPressed) {
        int max=releaseTimes[0];
        char max_c=keysPressed.charAt(0);
        for(int i=1;i<releaseTimes.length;i++){
            if(releaseTimes[i]-releaseTimes[i-1]>max){
                max_c=keysPressed.charAt(i);
              max=releaseTimes[i]-releaseTimes[i-1];
            }else if(releaseTimes[i]-releaseTimes[i-1]==max){
                if(keysPressed.charAt(i)-max_c>0){
                    max_c=keysPressed.charAt(i);
                }
            }else{
                continue;
            }
        }
        return max_c;
    }
}

306. 累加数

class Solution {
    public boolean isAdditiveNumber(String num) {
        //dfs深搜策略
    return dfs(num,0,0,0,0);

    } 

     //为了防止整数溢出,使用long类型
    public boolean dfs(String num,int index,int count,long pre1,long pre2){  
         //index:处理到了哪一个位置;count:已经处理了多少个数;prepre, pre:前面的两个数
        if(index==num.length()) return count>2;
        long cur=0;
         for(int i=index;i<num.length();i++){
             char c=num.charAt(i);
              // 剪枝1:不能做为前导0,但是它自己是可以单独做为0来使用的
             if(num.charAt(index)=='0' && i>index){
                 return false;
             }
             cur=cur*10+(c-'0');
            
             if (count >= 2) {
                long sum = pre1 + pre2;
                if (cur> sum) {
                    // 剪枝2:如果当前数比之前两数的和大了,说明不合适
                    return false;
                }
                if (cur < sum) {
                    // 剪枝3:如果当前数比之前两数的和小了,说明还不够,可以继续添加新的字符进来
                    continue;
                }
            }
            // if(dfs(num,index+1,count+1,pre2,cur)){
                if(dfs(num,i+1,count+1,pre2,cur)){
                 return true;
             }

         }
     return false;
    } 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值