LeetCode---396周赛

news2024/12/25 8:33:07

题目列表

3136. 有效单词

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

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

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

一、有效单词

 按照题目要求,统计个数,看是否符合条件即可,代码如下

class Solution {
public:
    bool isValid(string word) {
        string str = "aeiou";
        if(word.size()<3) return false;
        bool flag1 = false, flag2 = false;
        for(auto e:word){
            if(isdigit(e)) continue;
            if(isalpha(e)){
                if(str.find(tolower(e))==string::npos) flag1 = true;
                else flag2 = true;
            }else{
                return false;
            }
        }
        return flag1&&flag2;
    }
};

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

这题本质就是要将所给字符串分成长度为k的一个个子串,然后找这些子串中出现次数最多的,将其他的子串换成出现次数最多的子串,这样我们的操作次数最少。

这里要能想明白:题目要求我们将字符串变成周期为k的字符串<=>我们将字符串分成长度为k的子串,使得子串相同

代码如下

class Solution {
public:
    int minimumOperationsToMakeKPeriodic(string word, int k) {
        int n = word.size();
        int ans = 0;
        unordered_map<string,int>cnt;
        for(int i=0;i<n;i+=k){
            ans = max(ans,++cnt[word.substr(i,k)]);
        }
        return n/k - ans;
    }
};

三、同位字符串连接的最小长度

这题只要从小到大枚举可以的最小长度即可,可能有人觉得这样做会超时,但是不会,因为我们枚举的数是有条件的,它们得是字符串长度的因子,因为题目的第一句话就说我们要用字符串t和若干个t的同位字符串连接成s,而10^5以内的数的因子个数并不是很多,然后我们只要判断字符串是否能拆分成同位字符串即可,代如下码

class Solution {
public:
    int minAnagramLength(string s) {
        int n = s.size();
        vector<vector<int>>pre(n+1,vector<int>(26));
        for(int i=0;i<n;i++){
            pre[i+1]=pre[i];
            pre[i+1][s[i]-'a']++;
        }

        for(int i=1;i<=n;i++){// 枚举长度
            if(n%i) continue;
            // i得是n的因子
            bool flag = true;
            for(int j=2*i;j<=n;j+=i){
                for(int k=0;k<26;k++){
                    if(pre[i][k]!=pre[j][k]-pre[j-i][k]){
                        flag = false;
                        goto end;
                    }
                }
            }
        end:
            if(flag) return i;            
        }
        return -1;
    }
};

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

这题纯纯数学题,两个操作需要我们进行选择,是优先选择操作一,还是优先操作方案二,或者其他选法?

首先,我们肯定能想到如果cost1*2<=cost2,也就是说平均一次+1操作,操作一的开销更少,那么我们肯定选操作一将所有的数增大为数组中的最大值,这样的开销最少。

那么如果cost1*2>cost2呢?也就是说平均一次+1操作,操作二的开销更少,即我们需要优先进行操作二,让所有小于最大值的数尽可能的往最大值靠近,如果无法进行操作二,我们就选择操作一

可能很多人会这么想,但是这样做并不正确,因为如果开销操作二的足够小,操作一的开销足够大,那么我们完全可以将选一个更大的最大值,从而选择在进行多次操作二,以实现所有数字相同

也就是说我们不确定哪一个数作为最大值会最优,所以我们可以枚举最大值。

那么最大值的上界在哪里呢?我们总不能往后一直枚举。在说明这个问题之前,我们先来想想当我们选定一个最大值时,如何尽可能的选择操作二?如下

从上图可知:

1、mx <= s - mx时,花销为s/2*cost2+(s&1)*cost1

2、mx > s - mx时,花销为(s-mx)*cost2+(mx-(s-mx))*cost1=cost2*(s-mx)+cost1*(2mx-s)

其中mx为需要增加到最大值的最大+1次数,s为总共+1次数

那么我们如何确定我们的枚举上界呢?我们知道当我们的枚举上界越大时,需要+1的次数也会更多,从mx 和 s - mx 的不等式来看,mx的增加次数远远小于s - mx的增加次数,也就是说mx<=s-mx会一直保持不变,花销【s/2*cost2+(s&1)*cost1】只会越来越大所以我们枚举到mx <= s - mx时即可

设枚举到x即可,mn=min(nums),mx=max(nums),s为x=mx时,总共+1次数

2*(x - mn) <= s + (x - mx)*n  =>  x >= (n*mx-2*mn-s)/(n-2) 所以x最多为2*mx

代码如下

class Solution {
    const int MOD = 1e9+7;
public:
    int minCostToEqualizeArray(vector<int>& nums, int c1, int c2) {
        int n = nums.size();
        long long s = 0;
        int mx = ranges::max(nums);
        int mn = ranges::min(nums);
        for(auto x:nums) s += mx - x;
        if(c1*2<=c2) return s*c1%MOD;
        long long ans = LLONG_MAX;
        for(int x=mx;x<=2*mx;x++){
            int d = x - mn;
            long long res;
            if(d<=s-d) res = s/2*c2+s%2*c1;
            else res = (s-d)*c2 +(d*2-s)*c1;
            ans=min(ans,res);
            s += n;
        }
        return ans%MOD;
    }
};

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

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

相关文章

conan2 基础入门(03)-使用(msvc为例)

conan2 基础入门(03)-使用(msvc为例) 文章目录 conan2 基础入门(03)-使用(msvc为例)⭐准备生成profile文件预备文件和Code ⭐使用指令预览正确执行结果可能出现的问题 ⭐具体讲解conanconanfile.txt执行 install cmakeCMakeLists.txt生成项目构建 END ⭐准备 在阅读和学习本文…

Springboot集成Netflix-ribbon、Enreka实现负载均衡-12

Netflix Ribbon简介 Netflix Ribbon是Netflix发布的云中间层服务开源项目&#xff0c;主要功能是提供客户端的软件负载均衡算法&#xff0c;将Netflix的中间层服务连接在一起。 具体来说&#xff0c;Ribbon是一个客户端负载均衡器&#xff0c;可以在配置文件中列出所有的服务…

力扣例题(循环队列)

链接 . - 力扣&#xff08;LeetCode&#xff09; 描述 思路 我们使用数组来创建循环队列 数组的大小我们就额外对开辟一块空间 MyCircularQueue(k) 开辟一个结构体&#xff0c;存放队列的相关数据 分别为size,数组指针_a,起始位置head,结束位置tail 注意&#xff1a;我们…

【harbor】harbor的搭建与使用

harbor的搭建与使用 文章目录 harbor的搭建与使用1. harbor的下载2. 创建ssl证书3.harbor的配置3. docker修改4.启动harbor5.使用docker总结 1. harbor的下载 harbor仓库地址&#xff1a;https://github.com/goharbor/harbor harbor主要是go语言写的&#xff0c;但是我们dock…

Docker停止不了

报错信息 意思是&#xff0c;docker.socket可能也会把docker服务启动起来 解决 检查服务状态 systemctl status dockersystemctl is-enabled docker停止docker.socket systemctl stop docker.socket停止docker systemctl stop docker知识扩展 安装了docker后&#xff0c;…

计算机字符集产生的历史与乱码

你好&#xff0c;我是 shengjk1&#xff0c;多年大厂经验&#xff0c;努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注&#xff01;你会有如下收益&#xff1a; 了解大厂经验拥有和大厂相匹配的技术等 希望看什么&#xff0c;评论或者私信告诉我&#xff01; 文章目录 一…

python数据分析——pandas数据结构2

参考资料&#xff1a;活用pandas库 导入基础数据 # 导入库 import pandas as pd # 读取数据集 dfpd.read_csv(r"..\data\scientists.csv") df.head() 1、DataFrame DataFrame是Pandas中最常见的对象。可以把它看作python存储电子表格式数据的方式。Series数据结构…

PMOS和NMOS

一. MOS管简介 MOS管是场效应管的一种&#xff0c;主要有两种结构形式&#xff1a;N沟道和P沟道&#xff0c;又根据场效应原理的不同&#xff0c;分为耗尽型&#xff08;当栅压为零时有较大漏极电流&#xff09;和增强型&#xff08;当栅压为零&#xff0c;漏极电流也为零&…

Jenkins 备份恢复插件 ThinBackup

系统环境&#xff1a; Jenkins 版本&#xff1a;2.213 一、简介 在部署完 Jenkins 后首先要准备的就是数据备份问题&#xff0c;尤其是在生产环境下的 Jenkins&#xff0c;如果数据丢失很可能导致项目上线和开发时间受到影响&#xff0c;所以备份数据很重要。还好&#xff0c;…

[算法][差分数组][leetcode]1094. 拼车

地址&#xff1a; https://leetcode.cn/problems/car-pooling/description/ 解法一&#xff1a;暴力解法 class Solution {public boolean carPooling(int[][] trips, int capacity) {//特殊条件判断if(nulltrips||capacity<0){return false;}int [] d new int[1001];//暴…

VTK官方例子

VTK官方例子 vtkMutableDirectedGraph #!/usr/bin/env python# noinspection PyUnresolvedReferences import vtkmodules.vtkInteractionStyle # noinspection PyUnresolvedReferences import vtkmodules.vtkRenderingOpenGL2 from vtkmodules.vtkCommonColor import vtkName…

数组二叉树-华为OD

系列文章目录 文章目录 系列文章目录前言一、题目描述二、输入描述三、输出描述四、java代码五、测试用例 前言 本人最近再练习算法&#xff0c;所以会发布一些解题思路&#xff0c;希望大家多指教 一、题目描述 二叉树也可以用数组来存储&#xff0c;给定一个数组&#xff…

信息系统项目管理师0103:初步可行性研究(7项目立项管理—7.2项目可行性研究—7.2.2初步可行性研究)

点击查看专栏目录 文章目录 7.2.2初步可行性研究1.初步可行性研究定义2.辅助研究的目的和作用3.初步可行性研究的作用4.初步可行性研究的主要内容记忆要点总结7.2.2初步可行性研究 1.初步可行性研究定义 初步可行性研究一般是在对市场或者客户情况进行调查后,对项目进行的初步…

linux上使用mariadb安装mysql环境

之前都是手动安装mysql数据库&#xff0c;现在尝试下在线安装&#xff0c;为后面的项目部署做准备&#xff0c;突然发现使用mariadb安装mysql环境真的超级简单。 1.使用mariadb安装mysql 安装服务端&#xff1a; yum install mariadb-server -y 安装客户端&#xff1a; yum i…

大数据Scala教程从入门到精通第六篇:Scala编译结果反编译分析

一&#xff1a;Scala编译结果反编译分析 问题&#xff1a;为什么Scalac之后的生成的class文件有两个&#xff0c;一个带$的&#xff0c;一个不带$的&#xff1f; 不能直接java 执行scala编译的字节码文件。 直接运行的话就会报错&#xff0c;会报一个类没有被找到。 引入类库就…

【全面介绍下Spring】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

Excel中实现md5加密

1.注意事项 (1)在Microsoft Excel上操作 (2)使用完&#xff0c;建议修改的配置全部还原&#xff0c;防止有风险。 2.准备MD5宏插件 MD5加密宏插件放置到F盘下&#xff08;直接F盘下&#xff0c;不用放到具体某一个文件夹下&#xff09; 提示&#xff1a;文件在文章顶部&…

JCR一区 | Matlab实现TTAO-CNN-BiLSTM-MATT多特征分类预测

JCR一区 | Matlab实现TTAO-CNN-BiLSTM-MATT多特征分类预测 目录 JCR一区 | Matlab实现TTAO-CNN-BiLSTM-MATT多特征分类预测分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现TTAO-CNN-BiLSTM-MATT三角拓扑聚合优化器优化双向长短期记忆神经网络融合多头注意力…

JAVA 标准接口返回与i18n国际化配置

不喜欢废话直接上代码 标准通用返回 package com.luojie.common;import com.luojie.common.inter.ResponseCommon; import lombok.Data;Data public class ResponseCommonImpl implements ResponseCommon {int code;String msg;Object entity; }package com.luojie.common;im…

苹果电脑MAC清理系统空间工具CleanMyMacX4.15.3中文版下载

苹果电脑以其出色的性能、优雅的设计和高效的操作系统而受到许多用户的喜爱。然而&#xff0c;随着时间的推移和使用量的增加&#xff0c;你可能会发现你的Mac开始变得缓慢和响应迟缓。这通常是因为硬盘空间被大量占用&#xff0c;影响了系统的整体性能。幸运的是&#xff0c;有…