A.每日一题:输入单词需要的最少按键次数 Ⅰ+Ⅱ

3014

题目链接:3014. 输入单词需要的最少按键次数 I(简单)

算法原理:

解法:贪心

时间复杂度O(N)

0ms击败100.00%

由于 word 中每个小写字母各不相同,那么我们就可以优先把 word 中有的字母放到各个按键的最前面,这样就能保证只用一次就按出来,如果这 8 个挤不开了,就放到往各个按键的第二个位置上分配,以此类推,这样我们使用一个 while 循环就可以轻松解决了

Java代码:

java 复制代码
class Solution {
    //3014. 输入单词需要的最少按键次数 I
    public int minimumPushes(String word) {
        int n=word.length(),cnt=0;
        while(n>0){
            cnt+=n;
            n-=8;
        }
        return cnt;
    }
}

3016

题目链接:3016. 输入单词需要的最少按键次数 II(中等)

算法原理:

解法:贪心

时间复杂度O(N)

10ms击败90.48%

与上题类似,唯一不同的就是 word 中可能出现重复的小写字母了,那么如何解决呢??

其实也还是贪心的思想,很简单

直接把 word 字符串中各个字符出现的频率统计出来,排好序之后,我们把出现次数最多的放在各个按键的最前面即可,然后依次类推即可,这样即可保证用最少的次数按到所有需要按的字符

由于小写字母只有 26 个,因此我们可以借助数组实现,经过排序后再逆序遍历一遍就行了~~

Java代码:

java 复制代码
class Solution {
    //3016. 输入单词需要的最少按键次数 II
    public int minimumPushes(String word) {
        int[] hash=new int[26];
        for(char c:word.toCharArray()) hash[c-'a']++;
        Arrays.sort(hash);
        int cnt=0;
        for(int i=25;i>=0;i--){
            if(i>17) cnt+=hash[i];
            else if(i>9) cnt+=2*hash[i];
            else if(i>1) cnt+=3*hash[i];
            else cnt+=4*hash[i];
        }
        return cnt;
    }
}
相关推荐
用户6919026813394 分钟前
LangChain 与 LangGraph:从「链」到「图」,一次讲清它们是什么、什么关系
面试·架构·设计
Laurie三省6 分钟前
现场版却配上录音室版的歌词?聊聊我给开源 Mac 歌词软件写的多源打分算法
算法·macos·go
郑州光合科技余经理15 分钟前
本地生活平台搭建:跨业态用户标识怎么贯通
java·开发语言·前端·后端·uni-app·php·ai编程
对空六课16 分钟前
Vue 组件曝光埋点为什么会重复触发?去重方案与实现思路
服务器·前端·算法·数据分析
木头科技21 分钟前
【AI 工程化第八篇】Spring AI 多模型路由实战:DeepSeek、通义、Kimi、OpenAI 如何统一接入和自动切换
java·人工智能·spring
HZY1618yzh23 分钟前
下一代编程语言出炉
c++·算法
深盾科技_Virbox24 分钟前
云端与本地并行交付,软件许可管理如何实现统一运营?
java·大数据·开发语言·安全
thefool11226624 分钟前
多线程 3
java
CoderYanger31 分钟前
A.每日一题:856. 括号的分数
java·程序人生·算法·leetcode·面试·职场和发展·学习方法
kiracrimson44 分钟前
选择排序与快速排序:一次选极值,一次分区间
算法·排序算法