今日刷三题(day4):简写单词+dd爱框框+除2!

ops/2024/10/22 16:42:06/

题目一:简写单词

题目描述:

比如 “College English Test”可以简写成“CET”,“Computer Science”可以简写为“CS”,“I am Bob”简写为“IAB”

输入输出描述:
输入:一个复合单词

输出:输出一行,表示复合词的简写

思路解析:

step 1:输入一个字符串数组,规定以空格符号隔开
step 2:标记数组中每一组的第一个字母为ch
step 3:如果ch>=‘a’&&ch<='z',则转化为大写

作答情况(正确):

字符转化为大写的函数要掌握。

代码:

 public static void main(String[] args) {Scanner sc = new Scanner(System.in);String[] s = sc.nextLine().split(" ");StringBuffer sb = new StringBuffer();for (int i = 0; i < s.length; i++) {char ch=s[i].charAt(0);if(ch>='a'&&ch<='z'){ch=Character.toUpperCase(ch);}sb.append(ch);}System.out.print(sb);}

题目二:dd爱框框

题目描述:


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

输入输出描述:
输入:第一行两个数(1≤n≤10000000),x(1≤x≤10000)

输出:第二行n个数a[i](1≤a[i]≤1000)

思路解析:

同相双指针/滑动窗口

step 1(进窗口):sum+=arr[right]
step 2(判断):sum>=x?
step 3(更新结果):(right-left+1<retlen)?

step 4(出窗口):sum-=arr[left]

作答情况(运行超时):

①如果使用简单的Scanner&&System.out是从IO设备中读入,每次读取性能开销较大,在写代码时会造成超时的情况。

②对这个判断加上循环,可以减少内存和时间开销。

代码:

import java.io.*;
import java.util.*;
public class Main{static class Read {//字符串裁剪StringTokenizer st = new StringTokenizer("");/*  Java 处理IO有两套标准:①字节流(System.in)②字符流(含有Reader、Writer的)*///下面这一行两个作用:// (1)把输入的字节流(System.in)转化为点电脑可识别的字符流new InputStreamReader()//(2)BufferedReader 相当于一个内存缓冲区(读取数据快、稳)BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));String next() throws IOException {//下面这一行有两个作用://(1)while循环相当于多组输入的情况//(2)new StringTokenizer(bf.readLine())按行裁剪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());}}public static Read in = new Read();public static void main(String[] args) throws IOException {int n=in.nextInt();int x=in.nextInt();int[] arr=new int[n+1];for(int i=1;i<arr.length;i++){arr[i]=in.nextInt();}int sum=0;int left=1;int right=1;int retLen=0x3f3f3f3f;//系统最大值int retLeft=-1;int retRight=-1;//step 1(进窗口):sum+=arr[right] while(right<=n){sum+=arr[right];//step 2(判断):sum>=x?while(sum>=x){//step 3(更新结果):(right-left+1<retlen)?if(right-left+1<retLen){ retLeft=left;retRight=right;retLen=right-left+1;}   //step 4(出窗口):sum-=arr[left]sum-=arr[left];left++;}right++;}System.out.print(retLeft+" "+retRight);}
}

题目三:除2!

题目描述:

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

输入输出描述:

输入:第一行输入两个正整数 n 和 k ,用空格隔开  ;第二行输入 n 个正整数 ai

数据范围:1 ≤ n≤100000,1≤k≤10^9        1≤ai≤10^9

输出描述:
一个正整数,代表和的最小值。

思路解析:

大堆(每次选出最大的偶数)+贪心

作答情况(未作出):

①未想到大根堆解法;②sum根据输入描述必须用long

代码:

import java.io.*;
import java.util.*;
public class Main{public static Read in = new Read();static class Read {//字符串裁剪StringTokenizer st = new StringTokenizer("");/*  Java 处理IO有两套标准:①字节流(System.in)②字符流(含有Reader、Writer的)*///下面这一行两个作用:// (1)把输入的字节流(System.in)转化为点电脑可识别的字符流new InputStreamReader()//(2)BufferedReader 相当于一个内存缓冲区(读取数据快、稳)BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));String next() throws IOException {//下面这一行有两个作用://(1)while循环相当于多组输入的情况//(2)new StringTokenizer(bf.readLine())按行裁剪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());}}public static void main(String[] args) throws IOException {int n=in.nextInt();int k=in.nextInt();PriorityQueue<Integer> queue=new PriorityQueue<>((o1,o2)->o2-o1);long sum=0; long x=0;for(int i=0;i<n;i++){x=in.nextLong(); sum+=x;//35if(x%2==0){
queue.add((int)x);}}while(!queue.isEmpty()&&k!=0){long t=queue.poll()/2;sum-=t;//35-5-4-2k--;if(t%2==0){queue.add((int)t);}
}System.out.print(sum);}
}

收获:

①字符大小写的转换

小写字符/字符串 转化为大写字符的函数:

         //字符Character ch='a';ch=Character.toUpperCase(ch);//字符串String str="HELLO";str=str.toUpperCase();

大写字符转化为小写字符的函数:

          //字符Character ch='a';ch=Character.toLowerCase(ch);//字符串String str="HELLO";str=str.toLowerCase();

②Scanner输入会导致超时,这里给了大家一个输入模板,请大家跳转到这条博客Java输入输出模板( 针对ACM模式)-CSDN博客


http://www.ppmy.cn/ops/7425.html

相关文章

Compose 布局

文章目录 Compose 布局ColumnColumn属性使用 RowRow属性使用 BoxBox属性使用 ConstraintLayoutLazyColumnLazyColumn属性使用使用多类型使用粘性标题回到顶部 LazyRowLazyRow属性使用 LazyVerticalGridLazyVerticalGrid属性使用 Compose 布局 Column Compose中的”垂直线性布…

C++语言·内存管理

本节内容比较简单&#xff0c;重点就是new和delete关键字&#xff0c;写的就比较粗糙了 1. C/C内存分布 栈上的变量是即用即销毁&#xff0c;堆上的变量按需申请释放&#xff0c;静态和全局的生命周期是整个程序 没编译运行起来的代码叫“程序”&#xff0c;编译运行起来的程序…

String、StringBuilder、StringBuffer区别;String底层详解,实例化、拼接、比较;String为什么不可变

文章目录 0、前言一、String、StringBuilder、StringBuffer区别二、String简介2.1 String类特点2.2 创建String对象、String实例化2.2.1 实例化方法2.2.2 String str1"abc"和String str2new String("abc")区别 2.3 String的比较2.4 String类的“加法”2.5 …

npm ERR! code CERT_HAS_EXPIRED (创建vue过程)

npm ERR! code CERT_HAS_EXPIRED &#xff08;创建vue过程&#xff09; 起因&#xff1a;卸载 npm uninstall -g vue-cli时候发现报这个错误。 当我们创建vue之前&#xff0c;使用npm更新或者安装啥的时&#xff0c;出现此类提示&#xff0c;则表明&#xff0c;用来验证和网络加…

企业上云数字化转型的关键——选对服务器虚拟化

盘点市面上的主流虚拟化软件 虚拟化技术就像可以随意组合的乐高积木&#xff0c;可以高效、灵活地利用计算资源。世面上主流虚拟化很多&#xff0c;各有长处和短板。今天先来盘点一下市面上的主流虚拟化软件&#xff0c;一探究竟。 虚拟化的老牌巨头——VMware 老牌虚拟化巨…

动手写sql 《牛客网80道sql》

第1章&#xff1a;SQL编写基础逻辑和常见问题 基础逻辑 SELECT语句: 选择数据表中的列。FROM语句: 指定查询将要从哪个表中检索数据。WHERE语句: 过滤条件&#xff0c;用于提取满足特定条件的记录。GROUP BY语句: 对结果进行分组。HAVING语句: 对分组后的结果进行条件过滤。O…

每日OJ题_完全背包②_力扣322. 零钱兑换

目录 力扣322. 零钱兑换 问题解析 解析代码 优化代码&#xff08;滚动数组&#xff09; 力扣322. 零钱兑换 322. 零钱兑换 难度 中等 给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount &#xff0c;表示总金额。 计算并返回可以…

html接入高德地图

1.申请key key申请地址&#xff1a;https://console.amap.com/dev/key/app 官方文档 https://lbs.amap.com/api/javascript-api-v2/summary 2.html接入示例 需要将YOUR_KEY替换成自己的key <!doctype html> <html> <head><meta charset"utf-…