牛客 题解

文章目录


day4_17

BC149 简写单词

https://www.nowcoder.com/practice/0cfa856bf0d649b88f6260d878f35bb4?tpId=290\&tqId=39937\&ru=/exam/oj

j

思路:模拟
代码:
java 复制代码
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while(in.hasNext()){
            char c = in.next().charAt(0);
            if(c>='a'&&c<='z'){
                System.out.print((char)(c-32));
            }else{
                System.out.print(c);
            }
        }
    }

dd爱框框

https://ac.nowcoder.com/acm/contest/11211/F

思路:滑动窗口(同向双指针)

1.从1开始计数的

2.区间内的数字必须严格大于0,因为如果区间中存在小于0的数,left在滑动的时候,可能会增大,会倒逼right回退。只有严格大于0的数,随着left滑动,区间之和才会减小。right就会向后移动。

  • 进窗口:sum += arrright

  • 判断条件:sum >=x

  • 更新结果:right-left+1 < retlen retleft = left, retright = right

  • 出窗口:sum-= arrleft

代码:
java 复制代码
import java.util.*;
import java.io.*;
public class Main{
    public static void main(String[] args )throws IOException{
        Read in = new Read();
        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++;
        }
        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());
    }
}

除2!

https://ac.nowcoder.com/acm/contest/8563/A

思路:模拟+贪心+堆

1.优先级队列确保出队的都是最大值

2.如果出队/2之后仍是偶数,再次进队。

代码:
java 复制代码
import java.util.*;
import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int k = in.nextInt();
        PriorityQueue<Integer> heap = new PriorityQueue<>((a,b)->{
            return b-a;
        });
        long sum = 0,x;
        for(int i = 0; i<n; i++){
            x = in.nextLong();
            sum += x;
            if(x%2 == 0){
                heap.add((int)x);
            }
        }
        while(k-- != 0 && !heap.isEmpty()){
            long t = heap.poll() / 2;
            sum -= t;
            if(t%2 == 0){
                heap.add((int)t);
            }
        }
        System.out.println(sum);
    }
}

点击移步博客主页,欢迎光临~

相关推荐
此时不提桶,更待何时10 分钟前
02-05-B-虚拟线程面试与生产事故实战
java·面试
名字还没想好☜14 分钟前
Spring Boot 3.2 RestClient 实战:替代 RestTemplate 调外部接口,超时、连接池与错误处理
java·后端·spring
摇滚侠1 小时前
《Spring Boot 3:高级与架构设计》第 2 章 IOC容器的高级机制 BeanFactoryPostProcessor 个人理解 6
java·spring boot·笔记·后端
逆向编程1 小时前
QGIS地图投影(CRS坐标参照系)设置
开发语言
free-elcmacom1 小时前
发际线警告!手撕《C陷阱与缺陷》终极 BOSS:signal 函数与 typedef 魔法
c语言·开发语言·visual studio code·visual studio
程序员阿鹏1 小时前
简单介绍一下软引用
java·开发语言·jvm·数据结构·后端
SL_staff1 小时前
项目延期时如何用四类角色机制实现责任锚定?一线技术实践拆解
java·低代码·团队管理
wno7041 小时前
Spring Security Session管理
java·后端·spring
吃饱了得干活1 小时前
主键选择:从单机到分布式,一个被低估的性能决策
java·后端
haluhalu.2 小时前
初识 Protobuf:微服务跨语言通信的一份契约
java·c语言·开发语言·c++·python