Leetcode - 周赛396

news2024/11/28 19:42:48

目录

一,3136. 有效单词

二,3137. K 周期字符串需要的最少操作次数

三,3138. 同位字符串连接的最小长度

四,3139. 使数组中所有元素相等的最小开销


一,3136. 有效单词

本题就是一道阅读理解题:

  • 字符串长度小于3,返回false
  • 字符串出现除了26个字母和数字以外的字符,返回false
  • 字符串中必须出现至少一个元音字母,一个辅音字母

代码如下: 

class Solution {
    public boolean isValid(String word) {
        if(word.length() < 3) return false;
        String t = "aeiouAEIOU";
        int a = 0, b = 0, c = 0;
        for(char ch : word.toCharArray()){
            if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z'){
                if(t.indexOf(ch)!=-1){
                    a++;
                }else{
                    b++;
                }
            }else if(ch>='0'&&ch<='9'){
                c++;
            }else{
                return false;
            }
        }
        return a>0&&b>0;
    }
}

二,3137. K 周期字符串需要的最少操作次数

本题求最少操作次数,正难则反,可以转换成最多保留多少个长度为k的字符串,可以使用HashMap来存储长度为k的子字符串出现次数,用 总数 - 最多的出现次数 就是答案。

代码如下:

class Solution {
    public int minimumOperationsToMakeKPeriodic(String word, int k) {
        Map<String,Integer> map = new HashMap<>();
        int mx = 0;
        for(int i=0; i<=word.length()-k; i+=k){
            String t = word.substring(i, i+k);
            map.merge(t, 1, Integer::sum);
            mx = Math.max(mx, map.get(t));
        }
        return word.length()/k - mx;
    }
}

三,3138. 同位字符串连接的最小长度

本题的题意:能否将字符串均匀分成 x 段,使得每一段字符串出现字符的种类和数目一样,返回最短的子字符串,可以直接暴力

代码如下:

class Solution {
    public int minAnagramLength(String s) {
        char[] ch = s.toCharArray();
        int n = s.length();
        for(int k=1; k<=n/2; k++){
            if(n%k != 0) continue;
            int[] cnt = new int[26];
            for(int j=0; j<k; j++){
                cnt[ch[j]-'a']++;
            }
            boolean flg = true;//判断后续分成的字段是否符合条件
            for(int i=k; i<=n-k; i+=k){
                int[] cnt0 = new int[26];
                for(int j=i; j<i+k; j++){
                    cnt0[ch[j]-'a']++;
                }
                if(!Arrays.equals(cnt, cnt0)){
                    flg = false;
                    break;
                }
            }
            if(!flg) continue;
            return k;
        }
        return n;
    }
}

四,3139. 使数组中所有元素相等的最小开销

在写题之前,需要先解决一个问题,当数组中所有的元素相等时,这个相等的值(k)是否一定要等于原数组中的最大值?这是不一定的,比如 [1,14,14,15],cost1=2,cost2=1,该样例的中,当它的所有元素等于21时,它的所有开销最小,所以需要从max(nums)开始枚举这个k,不断的求出其中的最小值。

分类讨论:

  • cost1 * 2 <= cost2 ,直接全部使用 cost1 来增加,返回 s * cost1 % MOD
  • 接下来就是如何判断何时使用 cost1,cost2。易知,只有先使用cost2,再使用cost1,才能使得答案越小,这里讲一个结论,令 d = k - mn,s = 整个数组需要增加的1的次数:当 d <= s - d 时,res = s / 2 * cost2 + s % 2 * cost1;当 d > s - d 时,res = (s - d) * cost2 + (2*d - s) * cost1;

结论说明:上述选择同增(cost2)还是单增(cost1)的问题,可以转化成——给你一个字符串(只包含小写字母),让他重新排列,问你能否使得这个字符串相邻的字符不相同?

实在不明白可以去写一下这个题  重排字符串 (nowcoder.com)

class Solution {
    public int minCostToEqualizeArray(int[] nums, int cost1, int cost2) {
        int MOD = (int)1e9 + 7;
        long mx = 0, mn = nums[0], sum = 0;
        int n = nums.length;
        for(int x : nums){
            mx = Math.max(mx, x);
            mn = Math.min(mn, x);
            sum += x;
        }
        long s = n*mx - sum;
        if(2*cost1 <= cost2) 
            return (int)(s * cost1 % MOD);
        long ans = Long.MAX_VALUE;
        for(long i=mx; i<mx*2+1; i++){
            long d = i - mn;
            long res = 0;
            if(d <= s - d){
                res = s/2*cost2+s%2*cost1;
            }else{
                res = (s - d)*cost2+(d*2-s)*cost1;
            }
            s += n;
            ans = Math.min(ans, res);
        }
        return (int)(ans%MOD);
    }
}

优化:二分

class Solution {
    long base,n;
    long mn, mx, c1, c2;
    public int minCostToEqualizeArray(int[] nums, int cost1, int cost2) {
        int MOD = (int)1e9 + 7;
        this.c1 = cost1;
        this.c2 = cost2;
        long mx = 0, mn = nums[0];
        long sum = 0;
        int n = nums.length;
        this.n = n;
        for(int x : nums){
            mx = Math.max(mx, x);
            mn = Math.min(mn, x);
            sum += x;
        }
        long base = n*mx - sum;
        this.base = base;
        this.mx = mx;
        this.mn = mn;
        if(2*cost1 <= cost2) 
            return (int)(base * cost1 % MOD);
        
        long ans = Long.MAX_VALUE;
        if(mx%2==1){    
            ans = f(mx);
            mx += 1;
            base += n;
        }
        long l = mx/2, r = mx;//偶数
        while(l <= r){
            long k = (l + r)/2;
            if(f(k*2)<f((k+1)*2)){
                r = k - 1;
            }else{
                l = k + 1;
            }
        }
        long k0 = r + 1;

        l = mx/2;
        r = mx;
        while(l <= r){//奇数
            long k = (l + r)/2;
            if(f(k*2+1) < f((k+1)*2+1)){
                r = k - 1;
            }else{
                l = k + 1;
            }
        }
        long k1 = r + 1;
        ans = Math.min(ans, f(k0*2));
        ans = Math.min(ans, f(k1*2+1));
        return (int)(ans%MOD);
    }
    private long f(long i){
        long s = base + (i - mx)*n;
        long d = i - mn;
        if(d <= s - d){
            return s/2*c2 + s%2*c1;
        }
        return (s-d)*c2+(d*2-s)*c1;
    }
}

 

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

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

相关文章

Docker Compose常用命令与属性

大家好&#xff0c;今天给大家分享Docker Compose的常用命令&#xff0c;以及docker-compose文件的属性。Docker Compose 是一个用于定义和运行多容器 Docker 应用应用的重要工具。它通过一个配置文件&#xff08;docker-compose.yml&#xff09;来详细定义多个容器之间的关联、…

爬虫-无限debug场景 解决方式

解决无限debug 场景1 1. 鼠标右键 选择 continue to here&#xff08;此处不停留&#xff09;2. 鼠标右键 选择 edite breakpoint 设置 10 保证条件不成立 这行永远不执行3.方法置空 1. 方法调用加断点2. 控制台 setInterval function name() {}4. 替换文件 5. hoo…

如何使用phpMyAdmin删除数据库中的表?

本周有一个客户&#xff0c;购买Hostease的Linux虚拟主机&#xff0c;询问我们的在线客服&#xff0c;如何使用phpMyAdmin删除数据库中的表&#xff1f;我们为用户提供相关教程&#xff0c;用户很快解决了遇到的问题。在此&#xff0c;我们分享这个操作教程&#xff0c;希望可以…

LeetCode63:不同路径Ⅱ

题目描述 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish”&#xff09;。 现在考虑网格中有障碍物。那么从左上角…

飞凌嵌入式FET113i-S核心板在国产FTU中的适配性分析

智能电网建设的不断推进&#xff0c;使配电自动化成为了提升电网运行效率、保障供电质量的关键技术。在配电自动化系统中&#xff0c;馈线终端单元&#xff08;FTU&#xff09;作为连接电网与用户的重要节点&#xff0c;承担着实时监控、故障检测与隔离、远程控制等多项关键任务…

SpringMVC传递参数

1.RequestMapping RequestMapping本身可以处理&#xff0c;get或post,指定了get或post之后&#xff0c;就只能处理对应的请求。 RequestMapping(value{"haihiyo","goodMoring"},methodRequestMethod.POST)2.RestFul风格 RestFul是一种风格 比如:网站的访…

知识付费系统怎么搭建_轻松拥有知识付费平台

在信息爆炸的时代&#xff0c;知识的获取已不再局限于传统的课堂和书籍。随着科技的进步和互联网的普及&#xff0c;我们迎来了一个全新的知识获取方式——知识付费。今天&#xff0c;就让我们一起探讨如何搭建一个专属于您的知识付费系统&#xff0c;开启智慧的大门&#xff0…

VScode查看以十六进制查看文件的插件说明

找到插件并下载 打开指定的文件 选择打开方式即可 结果如下

AI写的论文AI疑似度太高怎么办?教你一招解决

随着 AI 技术迅猛发展&#xff0c;各种AI辅助论文写作的工具层出不穷&#xff01; 为了防止有人利用AI工具进行论文代写&#xff0c;在最新的学位法中已经明确规定“已经获得学位者&#xff0c;在获得该学位过程中如有人工智能代写等学术不端行为&#xff0c;经学位评定委员会…

诊所医院超常规运营管理思维课程

本课程旨在引领医疗机构管理者超越传统思维&#xff0c;探索创新运营管理策略。学员将学习领先的医疗管理理念、创新的运营模式&#xff0c;以及如何应对挑战和变革。课程内容涵盖战略规划、资源优化、服务创新等&#xff0c;帮助管理者提升运营效率&#xff0c;提供更优质的医…

什么是MVC?什么是SpringMVC?什么是三层架构?

文章目录 应用分层什么是MVC?什么是 SpringMVC&#xff1f;三层架构三层架构和MVC的关系 应用分层 在讲解什么是MVC之前&#xff0c;先来理解一下什么是应用分层。 应用分层是一种软件开发设计思想&#xff0c;将应用程序划分成N个层次&#xff0c;每个层次都分别负责自己的…

一对一WebRTC视频通话系列(五)——综合调试和功能完善

本系列博客主要记录一对一WebRTC视频通话实现过程中的一些重点&#xff0c;代码全部进行了注释&#xff0c;便于理解WebRTC整体实现。 本专栏知识点是通过<零声教育>的音视频流媒体高级开发课程进行系统学习&#xff0c;梳理总结后写下文章&#xff0c;对音视频相关内容感…

燃料电池发电系统详解

目录 前言 组成结构 系统参数 常见问题 参考资料 前言 见《氢燃料电池技术综述》 见《燃料电池工作原理详解》 组成结构 燃料电池发电系统&#xff0c;由多个子系统和子模块组成&#xff0c;示例如下&#xff1a; 燃料处理系统&#xff08;fuel processing system&#xf…

开启短剧新纪元,短剧小程序开发等你来探索

一、引言 在信息爆炸的时代&#xff0c;短视频已经成为人们日常生活中不可或缺的一部分。然而&#xff0c;随着人们对内容品质要求的不断提高&#xff0c;短剧作为一种新兴的内容形式&#xff0c;正逐渐崭露头角。为了满足广大用户对短剧内容的需求&#xff0c;我们倾力打造了…

Dark Reader:夜间模式,启动!

名人说&#xff1a;一点浩然气&#xff0c;千里快哉风。 ——苏轼 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、介绍二、下载安装1、Chrome应用商店&#xff08;需科学&#xff09;2、第三方直链下载 三、使…

在代码开发中的O(VO,BO,PO,DO,DTO)介绍

先来看个图各种O的地位&#xff1a; 从图中可以看到各种O 的位置和用法&#xff0c;接下来&#xff0c;进行简单对O进行介绍&#xff1a; BO&#xff1a;Business Object 业务对象&#xff0c;PO是一条交易记录&#xff0c;BO是一个人全部的交易记录集合对象 DTO&#xff1a;…

NSSCTF | [SWPUCTF 2021 新生赛]easy_sql

打开题目&#xff0c;提示输入一些东西&#xff0c;很显眼的可以看到网站标题为“参数是wllm” 首先单引号判断闭合方式 ?wllm1 报错了&#xff0c;可以判断为单引号闭合。 然后判断字节数&#xff08;注意‘--’后面的空格&#xff09; ?wllm1 order by 3-- 接着输入4就…

MQTT客户端软件MQTT.fx

mqtt.fx支持通过 Topic 订阅和发布消息&#xff0c;用来前期和物联网云平台调试非常方便。 在云端创建产品后&#xff0c;一般先测试一下对接接口是否可以正常使用&#xff01;该工具目前可以对接百度云、华为云&#xff0c;以及自己使用EMQ-X搭建的Mqtt服务器。 下载安装 链…

[蓝桥杯]真题讲解:抓娃娃(思维+二分)

[蓝桥杯]真题讲解&#xff1a;抓娃娃&#xff08;思维二分&#xff09; 一、视频讲解二、正解代码1、C2、python33、Java 一、视频讲解 [蓝桥杯]真题讲解&#xff1a;抓娃娃&#xff08;思维二分&#xff09;&#xff09; 二、正解代码 1、C #include<bits/stdc.h> #d…

SpringBoot 具体是做什么的?

Spring Boot是一个用于构建独立的、生产级别的、基于Spring框架的应用程序的开源框架。它的目标是简化Spring应用程序的开发和部署过程&#xff0c;通过提供一种快速、便捷的方式来创建Spring应用程序&#xff0c;同时保持Spring的灵活性和强大特性。 1. 简化Spring应用程序开…