小红书笔试3.26

三道编程,过了2.81

第一题字符串解密,没考算法

import java.util.Scanner;

public class Main1 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        //
        char[] arr = new char[26];
        for (int i = 0; i < 26; i++) {
            arr[i] = (char) ('a' + i);
        }
        String s = scanner.next();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < s.length(); i++) {
            int a = s.charAt(i) - 'a';
            int b = (a -3 + 26) % 26;
            sb.append(arr[b]);
        }
        System.out.println(sb);
    }
}

第二题贪心,找到从1开始最长递增序列的长度x,然后总长度-x 之后再对k向上取整即可

import java.io.*;
import java.util.*;

public class Main4 {
    static StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
    static int nextInt() throws IOException {
        in.nextToken();
        return (int)in.nval;
    }

    public static void main(String[] args) throws IOException {

        int m  = nextInt();
        while (m -- > 0){
            int n = nextInt();
            int k = nextInt();
            int[] arr = new int[n];
            for (int i = 0; i < n; i++) {
                arr[i] = nextInt();
            }
            int ans = 0;
            int a = 1;
            for (int i = 0; i < n; i++) {
                if (arr[i] == a) a++;
            }
            int t = n - a + 1;
            if (t % k == 0) ans = t / k;
            else ans = t / k + 1;
            System.out.println(ans);
        }
    }
}

第三题 只会暴力模拟一下,过了81%,后面看朋友们说把for循环里面的if提出来就行,嗐,我没想到是这里慢了

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main3 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//        Scanner scanner = new Scanner(System.in);
        int n = Integer.parseInt(br.readLine());
        int[] arr= new int[n];
        String[] sarr = br.readLine().split(" ");
//        System.out.println(Arrays.toString(sarr));
        for (int i = 0; i < n; i++) {
            arr[i] = Integer.parseInt(sarr[i]);
        }
        int m = Integer.parseInt(br.readLine());
        int[] l = new int[m];
        int[] r = new int[m];
        int[] x = new int[m];

        sarr = br.readLine().split(" ");
        for (int i = 0; i < m; i++) {
            l[i] = Integer.parseInt(sarr[i]) - 1;
        }
        sarr = br.readLine().split(" ");
        for (int i = 0; i < m; i++) {
            r[i] = Integer.parseInt(sarr[i]) - 1;
        }
        String s = br.readLine();
        char[] ope = new char[m];
        for (int i = 0; i < s.length(); i++) {
            ope[i] = s.charAt(i);
        }
        sarr = br.readLine().split(" ");
        for (int i = 0; i < m; i++) {
            x[i] = Integer.parseInt(sarr[i]);
        }
        for (int i = 0; i < m; i++) {
            // 第i次操作
            for (int j = l[i]; j <= r[i] ; j++) {
                // j是数组arr的下标
                if (ope[i] == '='){
                    arr[j] = x[i];
                }else if (ope[i] == '&'){
                    arr[j] &= x[i];
                }else {
                    arr[j] |= x[i];
                }
            }
        }
        for (int i = 0; i < n; i++) {
            System.out.print(arr[i] + " ");
        }
    }
}

#笔试#
全部评论
第2题,找到从1开始最长递增序列的长度x,然后总长度-x 之后再对k向上取整即可,为什么呢?
点赞 回复 分享
发布于 2023-03-26 21:03 江苏
第三题我Java提出来照样过不了
点赞 回复 分享
发布于 2023-03-26 19:11 湖南

相关推荐

头像
05-16 11:16
已编辑
东华理工大学 Java
牛客737698141号:盲猜几十人小公司,庙小妖风大,咋不叫她去4️⃣呢😁
点赞 评论 收藏
分享
自由水:笑死了,敢这么面试不敢让别人说
点赞 评论 收藏
分享
评论
2
26
分享

创作者周榜

更多
牛客网
牛客企业服务