本系列可作为 JAVAEE初阶 学习系列的笔记,文中提到的一些练习的代码,小编会将代码复制下来,大家复制下来就可以练习了,方便大家学习。
点赞关注不迷路!您的点赞、关注和收藏是对小编最大的支持和鼓励!
系列文章目录
JAVA算法刷题---DAY1 数字统计、两个数组的交集、点击消除
JAVA算法刷题---DAY2 牛牛的快递、最小花费爬楼梯、数组中两个字符串的最小距离
JAVA算法刷题---DAY 3 简写单词 dd爱框框 除2!
目录
目录
前言
小编作为新晋码农一枚,会定期整理一些写的比较好的代码,作为自己的学习笔记,会试着做一下批注和补充,如转载或者参考他人文献会标明出处,非商用,如有侵权会删改!欢迎大家斧正和讨论!
今天的练习使用快速IO 详情可以查看 JAVA算法刷题---DAY 0 JAVA的快速IO
1.简写单词
题目链接:简写单词_牛客题霸_牛客网
描述
规定一种对于复合词的简写方式:只保留每个组成单词的首字母,并将首字母大写后再连接在一起。
例如:
∙ ∙“College English Test”可简写为“CET”;
∙ ∙“Computer Science”可简写为“CS”;
∙ ∙“I am Bob”可简写为“IAB”。
现在输入一个由若干单词组成的复合词,请输出它的简写形式。
输入描述:
在一行中输入一个复合词,由若干单词组成。
∙ ∙单词数 sumsum 满足 1≦sum≦1001≦sum≦100;
∙ ∙每个单词长度 lenlen 满足 1≦len≦501≦len≦50;
∙ ∙单词之间由单个空格分隔;
∙ ∙每个单词仅由大小写英文字母组成。
输出描述:
输出一个字符串,为复合词的简写形式。
简写方式为:取每个单词的首字母并将其转换为大写,然后按原单词顺序依次连接。
请不要输出多余的空格或换行。
示例1
输入:
International Collegiate Programming Contest
复制输出:
ICPC
复制
示例2
输入:
Super mySQL
复制输出:
SM
import java.util.*;
import java.io.*;
public class Main {
public static PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
public static Read in = new Read();
public static void main(String[] arg) throws IOException {
String line;
while ((line = in.nextLine()) != null) {
// 替换isBlank,Java8兼容写法
if (line.trim().isEmpty()) continue;
StringTokenizer st = new StringTokenizer(line);
while (st.hasMoreTokens()) {
String word = st.nextToken();
char first = word.charAt(0);
if (first >= 'a' && first <= 'z') {
out.print((char) (first - 32));
} else {
out.print(first);
}
}
}
out.close();
}
}
class Read {
StringTokenizer st;
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String next() throws IOException {
while (st == null || !st.hasMoreTokens()) {
String line = bf.readLine();
if (line == null) return null;
st = new StringTokenizer(line);
}
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());
}
}
2.dd爱框框
题目链接:dd爱框框_牛客题霸_牛客网
描述
读入n,xn,x,给出nn个数a[1],a[2],……,a[n]a[1],a[2],……,a[n],求最小的区间[l,r][l,r],使a[l]+a[l+1]+……+a[r]≥xa[l]+a[l+1]+……+a[r]≥x,若存在相同长度区间,输出ll最小的那个
输入描述:
第一行两个数,n(1≤n≤10000000),x(1≤x≤10000)
第二行n个数a[i](1≤a[i]≤1000)
输出描述:
输出符合条件l,r(保证有解)
示例1
输入:
10 20 1 1 6 10 9 3 3 5 3 7
复制输出:
3 5
import java.util.*;
import java.io.*;
public class Main{
public static PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
public static Read in=new Read();
public static void main(String[] args) throws IOException{
int n=in.nextInt(),x=in.nextInt();
int[] arr=new int[n+1];
for(int i=1;i<=n;i++){
arr[i]=in.nextInt();
}
int left=1,right=1,sum=0;
int retleft=-1,retright=-1,retlen=n;
while(right<=n){
sum+=arr[right];
while(sum>=x){
if(right-left+1<retlen){
retleft=left;
retright=right;
retlen=right-left+1;
}
sum-=arr[left++];
}
right++;
}
out.println(retleft+" "+retright);
out.close();
}
}
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());
}
}
3.除2!
题目链接:除2!
题目描述
给一个数组,一共有 n n\ n 个数。
你能进行最多 k k\ k 次操作。每次操作可以进行以下步骤:
- 选择数组中的一个偶数 aia_iai,将其变成 ai/2a_i/2ai/2 。
现在你进行不超过 k k\ k 次操作后,让数组中所有数之和尽可能小。请输出这个最小的和。
输入描述:
第一行输入两个正整数 n n\ n 和 k k\ k ,用空格隔开
第二行输入n n\ n 个正整数 aia_iai
数据范围:
1≤n≤100000,1≤k≤1091 ≤ n≤100000,1≤k≤10^91≤n≤100000,1≤k≤109
1≤ai≤1091≤a_i≤10^91≤ai≤109
输出描述:
一个正整数,代表和的最小值。
示例1
输入
复制5 3 2 4 8 10 11
5 3 2 4 8 10 11
输出
复制24
24
说明
对8操作2次,对10操作1次,最后的数组是2 4 2 5 11。可以证明这样的操作是最优的。
import java.util.*;
import java.io.*;
public class Main{
public static PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
public static Read in=new Read();
public static void main(String[] args) throws IOException{
int n=in.nextInt(),k=in.nextInt();
long sum=0;
PriorityQueue<Integer> heap=new PriorityQueue<>((a,b)->{return b-a;});
for(int i=0;i<n;i++){
int x=in.nextInt();
sum+=x;
if(x%2==0){
heap.add((int)x);
}
}
while(!heap.isEmpty()&&k--!=0){
int x=(int)heap.poll()/2;
sum-=x;
if(x%2==0){
heap.add((int)x);
}
}
out.println(sum);
out.close();
}
}
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());
}
}


总结
以上就是今天要讲的内容,本文简单记录了算法刷题内容,仅作为一份简单的笔记使用,大家根据注释理解,您的点赞关注收藏就是对小编最大的鼓励!
588

被折叠的 条评论
为什么被折叠?



