1.简写单词
题目链接:简写单词_牛客题霸_牛客网
public static void main(String[] args) {Scanner sc = new Scanner(System.in);while(sc.hasNext()){ // 输入多少读入多少char ch = sc.next().charAt(0); // 提取首字母if(ch >= 'a' && ch <= 'z'){System.out.print((char) (ch - 32));}else {System.out.print(ch);}}}
2.dd爱框框
题目链接:登录—专业IT笔试面试备考平台_牛客网
解题思路:
注意:题目所给n个数字是从 a[1] 开始读入
我们创建两个变量 left,right,都从1下标位置开始记录,right一直向后移动直到相加的结果大于等于x的时候开始更新 retLeft 和 retRight 下标(retLeft 和 retRight指的是相加结果大于等于sum目前最小区间下标)
同时left下标向右移动一位,right在之前的位置上继续右移,因为输入的数字都是大于1的数字所以right没必要从left新下标开始相加,left右移sum只会减少,而right下标是第一次出现sum相加大于等于x的下标,所以前面的数字相加肯定是小于x的
只要right和left下标上的数字相加大于等于x并且长度比之前小的时候retLeft 和 retRight 就开始更新下标以此循环直到找出最小长度
public static void main(String[] args) throws IOException{Read read = new Read();int n = read.nextInt();int x = read.nextInt();int[] arr = new int[n + 1];int left = 1,right = 1;int sum = 0,retLeft = -1 , retRight = -1,retLen = n;for (int i = 1; i < n + 1; i++) {arr[i] = read.nextInt();}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);}static class Read // ⾃定义快读 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!(贪心+堆)
题目链接:登录—专业IT笔试面试备考平台_牛客网
解题思路:
创建大根堆把偶数放进去,最大的偶数一直除二得到合就为最小
public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt(),k = sc.nextInt();PriorityQueue<Integer> heap = new PriorityQueue<>((a,b) ->{return b -a;});long sum = 0,x;for (int i = 0; i < n; i++) {x = sc.nextLong();sum+=x;if(x % 2 == 0){heap.add((int)x);}}while(!heap.isEmpty() && k-- != 0){long t = heap.poll()/2;sum -=t;if(t % 2 == 0){heap.add((int)t);}}System.out.println(sum);}