千锤百炼之每日算法(三)

题外话

不会再水了,先把算法任务完成!

正题

第一题

简写单词

规定一种对于复合词的简写方式为只保留每个组成单词的首字母,并将首字母大写后再连接在一起
比如“College English Test"可以简写成“CET",“Computer Science' 可以简写为"CS",I am Bob”简写为“IAB"
输入一个长复合词(组成单词数sum, sum≥1且sum≤100,每个单词长度len,len≥1且len≤50)
请你输出它的简写

第一题思路

1.我们通过单词输入的时候先将字符串转换成大写形式,再通过public char charAt(0)方法,将字符串首字母拿出来即可

第一题代码详解

public void test5(String str)
{
    Scanner in = new Scanner(System.in);
    //首先判断是否还有下一个输入项也就是空格作为分隔符,检查空格后面有没有输入项
    while (in.hasNext()) {
        //将每个输入项转换成大写字母,并且将第一个字符赋值ch
        char ch=in.next().toUpperCase().charAt(0);
//输出字符即可
            System.out.print(ch);
    }
}

第二题

除2!

给一个数组,一共有n个数。
你能进行最多k次操作。每次操作可以进行以下步骤:
选择数组中的一个偶数ai,将其变成ai/2。
现在你进行不超过k次操作后,让数组中所有数之和尽可能小。请输出这个最小的和。

第二题思路

1.首先我们需要sum将所有元素和放入

2.我们每次选取除2的偶数一定是所有元素中最大的偶数,所以我们可以用大根堆,也就是优先级队列

3.我们将所有偶数放入优先级队列中,然后堆顶元素就一定是最大的偶数

4.我们让sum减去堆顶元素取出除2,再判断堆顶元素除2之后是否还是偶数,如果是偶数就放回堆中

第二题代码详解

public long Test6()
{
    Scanner in=new Scanner(System.in);
    //输入n和k
    int n=in.nextInt();
    int k=in.nextInt();


    //创建大根堆,这里利用的是lambed表达式
    PriorityQueue<Integer> queue=new PriorityQueue<>(( o1,o2)-> o2-o1);


    //创建sum和x注意数据类型,sum用于存放整个数据,x用于判断输入的值是不是偶数
    long sum=0;
    long x=0;


    //for循环用于存放n个数据,并且用来判断输入的值是不是偶数
    for (int i = 0; i < n; i++) {


        //将输入的值放入x中
        x = in.nextLong();


        //所有元素和放在sum中
        sum += x;


        //判断输入数据是不是偶数
        if (x % 2 == 0) {


            //是偶数放入堆中
            queue.add((int) x);
        }
    }


    //到了这里sum是n个数据的总和,大根堆中全部都是偶数,只要堆不为空并且k不为0就说明里面还有偶数并且还有除2的执行次数
      while (!queue.isEmpty()&&k--!=0)
        {
            //将堆顶元素取出除2放入t中
            long t=queue.poll()/2;


            //因为t除2,所以sum要减去t
            sum-=t;


            //如果t还是偶数
            if (t%2==0)
            {
                //则继续放入堆中
                queue.add((int)t);
            }
        }


      //返回sum即可
    return sum;
}

第三题

dd爱框框

读入n,x,给出n个数a[1],a[2],……,a[n],求最小的区间[l, r],
 使 a[l]+a[l+1]+……+a[r] ≥ x,若存在相同长度区间,输出最小的那个

第三题思路

注意事项!

1.首先我们需要注意这里的n最大已经达到了10^7

2.有些题会造成输入输出超时,我们这里输入元素过于多,输出元素就两个

3.当我们发现输入元素超时的时候,我们就需要利用快读读入代码,大家可以看看我这篇博客

千锤百炼之算法Scanner和System.out引起超时解决办法-CSDN博客

思路

1.首先我们需要用双指针,去记录超过x大小的区间段

2.我们要找到最小超过x大小的区间段,所以还需要两个指针去不断更新超过x大小的区间段

3.如何判断新找到的超过x大小的区间段是否比上一个找到的区间小,我们就需要记录区间段大小

4.注意看我们这里数组是从1下标开始

第三题代码详解

public void test7() throws IOException {
    Read in=new Read();
    //输入n和x
    int n=in.nextInt();
    int x=in.nextInt();


    //因为下标从1开始,所以数组元素数量为n+1
    int[] arr=new int[n+1];


    //for循环给arr数组赋值
    for (int i=1;i<=n;i++)
    {
        arr[i]=in.nextInt();
    }


    //创建双指针让left和right指向1下标
    int left=1,right=1;


    //创建retlet和retright,让其记录最小的长度区间
    int retleft=-1,retright=-1;


    //让len记录长度区间大小,先赋值数组长度
    int len=n;


    //创建sum,让sum进行累加判断是否超过x
    int sum=0;


    //当right没有走到数组最后一个元素就继续循环
    while (right<=n)
    {
        //sum累加arr[right]
        sum+=arr[right];
        //当sum大于等于x说明找到了长度区间
        while (sum>=x)
        {
            //如果right-left+1小于len说明这个区间是目前最小长度区间
            if (right-left+1<len)
            {
                //将left下标赋值retleft
                retleft=left;
                //将right下标赋值retright
                retright=right;
                //最后更新长度区间
                len=right-left+1;
            }
            //让sum累减arr[left++],继续续循环判断sum是否仍然大于等于x
            sum-=arr[left++];
        }
       //最后right++即可
        right++;

    }
    //当right走到最后一个元素跳出循环则找到了最小区间,打印出更新的最小区间即可
    System.out.println(retleft+" "+retright);

}
class Read // 自定义快速读入
{
    StringTokenizer st = new StringTokenizer("");
    BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
    String next() throws IOException
    {
        while(!st.hasMoreTokens())
        {
            st = new StringTokenizer(bf.readLine());
        }
        return st.nextToken();
    }

    String nextLine() throws IOException
    {
        return bf.readLine();
    }

    int nextInt() throws IOException
    {
        return Integer.parseInt(next());
    }

    long nextLong() throws IOException
    {
        return Long.parseLong(next());
    }

    double nextDouble() throws IOException
    {
        return Double.parseDouble(next());
    }
}

小结

继续去学习新内容了,本篇博客到此结束

喜欢的家人们麻烦三连(点赞关注收藏!!!)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【深度学习】【Lora训练1】StabelDiffusion,Lora训练过程,秋叶包,Linux,SDXL Lora训练

文章目录 一、环境搭建指南二、个性化安装流程三、启动应用四、打开web五、开始训练 19.27服务器 一、环境搭建指南 打造一个高效且友好的开发环境&#xff1a; 项目源码获取&#xff1a; 通过以下命令轻松克隆项目及所有子模块至您的Linux系统&#xff1a; git clone --recu…

《ElementUI 基础知识》el-tabs header 监听鼠标中键滚动时左右滑动(ElementPlus同样适用)

前言 收到需求&#xff0c;可监听 el-tabs 头在鼠标 hover 时。滑动鼠标中键&#xff0c;可左右滑动&#xff01; 效果 鼠标中键上下滑动时&#xff1b;向上滑&#xff0c;向左移动&#xff1b;向下滑&#xff0c;向右移动&#xff1b; 实现 代码56 - 60行&#xff0c;添加…

寝室快修|基于SprinBoot+vue的贵工程寝室快修小程序(源码+数据库+文档)

贵工程寝室快修目录 目录 基于SprinBootvue的贵工程寝室快修小程序 一、前言 二、系统设计 三、系统功能设计 1学生信息管理 2 在线报修管理 3公告信息管理 4论坛信息管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&a…

操作系统安全:安全审计,Windows系统日志详解,Windows事件ID汇总

「作者简介」&#xff1a;2022年北京冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础对安全知识体系进行总结与归纳&#xff0c;著作适用于快速入门的 《网络安全自学教程》&#xff0c;内容涵盖系统安全、信息收集等…

C++深度解析教程笔记2

C深度解析教程笔记2 第3课 - 进化后的 const 分析实验-C与C的const区别实验-C与C的const区别&const作用域 第4课 - 布尔类型和引用小结 本文学习自狄泰软件学院 唐佐林老师的 C深度解析教程&#xff0c;图片全部来源于课程PPT&#xff0c;仅用于个人学习记录 第3课 - 进化后…

Unity 递归实现数字不重复的排列组合

实现 private void Permutation(List<int> num, int leftIndex, List<string> strs) {if (leftIndex < num.Count){for (int rightIndex leftIndex; rightIndex < num.Count; rightIndex){Swap(num, leftIndex, rightIndex);Permutation(num, leftIndex 1…

HarmonyOS 鸿蒙下载三方依赖 ohpm环境搭建

前言 ohpm&#xff08;One Hundred Percent Mermaid &#xff09;是一个集成了Mermaid的命令工具&#xff0c;可以用于生成关系图、序列图、等各种图表。我们可以使用ohpm来生成漂亮且可读性强的图表。 本期教大家如何搭建ophm环境&#xff1a; 一、在DevEco Studio中&#…

前端可以掌握的nginx相关操作

一、前言&#xff1a; 在日常开发中&#xff0c;前端工程师可以把打好的前端包直接放到测试服务器上&#xff0c;自己再验证功能是否改好&#xff0c;这样可以提高开发效率&#xff0c;写篇笔记记录一下我个人用到的命令 二、使用的工具 用MobaXterm完成相关操作&#xff0c…

Vue3 + TS 项目实战 - 后台管理系统 - 按钮权限

前期回顾 网站的打赏 —— 新一代的思路-CSDN博客https://blog.csdn.net/m0_57904695/article/details/136704914?spm1001.2014.3001.5501 目录 &#x1f6a9; XX银行_系统管理_按钮权限控制_前端_提测单 项目信息 提测版本信息 功能列表 测试范围 测试环境 ✅ 步…

[paper note]代码生成评估模型-CodeBLEU原理分析

论文信息 论文标题&#xff1a;CodeBLEU: a Method for Automatic Evaluation of Code Synthesis 发表时间&#xff1a;2020年9月 论文原文&#xff1a;CodeBLEU: a Method for Automatic Evaluation of Code Synthesis 论文内容 摘要 评价指标对一个领域的发展起着至关重…

大厂常见算法50题-替换空格

专栏持续更新50道算法题&#xff0c;都是大厂高频算法题&#xff0c;建议关注, 一起巧‘背’算法! 文章目录 题目解法一 String类replace方法解法二 遍历替换总结 题目 解法一 String类replace方法 String类自带的replace&#xff0c;方法传入两个char类型的参数&#xff0c;分…

分类预测 | Matlab实现CNN-GRU-SAM-Attention卷积门控循环单元融合空间注意力机制的数据分类预测

分类预测 | Matlab实现CNN-GRU-SAM-Attention卷积门控循环单元融合空间注意力机制的数据分类预测 目录 分类预测 | Matlab实现CNN-GRU-SAM-Attention卷积门控循环单元融合空间注意力机制的数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现CNN-GRU…

蓝牙低能耗安全连接 – 数值比较

除了 LE Legacy 配对之外&#xff0c;LE Secure Connections 是另一种配对选项。 LE 安全连接是蓝牙 v4.2 中引入的增强安全功能。它使用符合联邦信息处理标准 (FIPS) 的算法&#xff08;称为椭圆曲线 Diffie Hellman (ECDH)&#xff09;来生成密钥。对于 LE 安全连接&#xff…

【Stream流基础篇】Java中的函数、函数对象、函数接口和方法引用及转换

什么是函数 在数学中&#xff0c;函数是这样定义的&#xff1a;它是给定一个数集A&#xff0c;假设其中的元素为x&#xff0c;对A中的元素x施加对应法则f&#xff0c;记作f&#xff08;x&#xff09;&#xff0c;得到另一数集B&#xff0c;假设B中的元素为y&#xff0c;则y与x…

pytorch中的过拟合和欠拟合

基本概念 我们知道&#xff0c;所谓的神经网络其实就是一个复杂的非线性函数&#xff0c;网络越深&#xff0c;这个函数就越复杂&#xff0c;相应的表达能力也就越强&#xff0c;神经网络的训练则是一个拟合的过程。   当模型的复杂度小于真实数据的复杂度&#xff0c;模型表…

GMSSL编译iOS

一、GMSSL-2.x 国密SDK源码下载&#xff0c;对GMSSL库进行编译生成对应的静态库。执行如下命令&#xff1a; cd到SDK源码目录 cd /Users/xxxx/Downloads/GMSSLV2-master查看SDK适用环境 ./config上图中错误解决方法 使用文本编辑器打开SDK目录下Configure、test/build.info、…

【STM32F407+CUBEMX+FreeRTOS+lwIP之UDP记录】

STM32F407CUBEMXFreeRTOSlwIP之UDP记录 基本信息cubemx配置GPIONVICRCCSYSETHFREERTOSlwIP UDP&#xff08;SOCKET&#xff09;效果 UDP广播&#xff08;SOCKET&#xff09;效果 UDP组播&#xff08;SOCKET&#xff09;cubemx注意以下ethernetif.c效果 可参考正点原子和野火的手…

深度学习论文:Local Feature Matching Using Deep Learning: A Survey

深度学习论文: Local Feature Matching Using Deep Learning: A Survey Local Feature Matching Using Deep Learning: A Survey PDF: https://arxiv.org/pdf/2401.17592 1 概述 近年来&#xff0c;深度学习模型的引入引发了对局部特征匹配技术的广泛探索。本文旨在全面概述局…

go语言实现简单ngnix样例

目录 1、代码实现样例&#xff1a; 2、postman调用ngnix&#xff0c;转发&#xff1a; 1、代码实现样例&#xff1a; package mainimport ("bytes""encoding/json""io""log""net/http""net/http/httputil""…

防止核心研发数据流失:管理者跳槽怎么办?

在高速发展的科技行业中&#xff0c;核心研发数据是企业最宝贵的资产之一。然而&#xff0c;当高层管理人员或核心技术人员因跳槽等原因离开公司时&#xff0c;他们可能会无意中或有意地携带走企业的核心研发数据&#xff0c;这对于任何企业来说都是一个巨大的风险。为了有效地…
最新文章