10.15百度笔试+Java后端

两道题样例都通过,提交0%, 哭死我了。第一道找到原因,第二道有大佬可以指点一下。陷入第一二道题目的0%中。第三道没时间看。

一、 第一题。 1~n 选取k个数的最大积分。初始积分为0, 对于选取的每个数i, 如果i + 1不选, 得分加1

分析, 以1 2 3 4 5和1 2 3 4 5 6为例子

(一)当n为偶数时, 例如等于6, 那么间隔取可以获得的最多得分为n/2, 当选取的个数k小于或等于n/2时候,可以获得最大 得分k

当k 大于n/2时候, 剩余k - n/2个元素还没有选,继续选的话会扣分,但是需要注意选取红色箭头的位置元素是不会扣分的,

所以扣分总数应该为k - n/2 - 1, 那么最后得分为n/2 - (k - n/2 - 1)。记n/2 = max, 那么最后得分max - (k - max - 1)

笔试的时候忽略了n为偶数时候的这种情况, 提交通过0%(下面代码为笔试时候的代码)

(二) n 为奇数时候

max = n/2 + 1

跟上述情况一样, 但是不同的是当k > max时,先选max个元素得到max积分过后,剩下的max - k个元素每选一个都要扣分

最后得分max - (max - k)

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int T = in.nextInt();
        for (int i = 0; i < T; i++) {
            long n = in.nextLong();
            long k = in.nextLong();
            long max = 0;
            if (n % 2 != 0){
                max = n / 2 + 1;
            }else {
                max = n / 2;
            }
            if (k <= max) {
                System.out.println(k);
            } else {
                System.out.println(2 * max - k);
            }
        }
    }
}

二、第二题。输入一个字符串, 长度为n, 下标从1开始。对字符串进行n次操作,每次操作:将字符串的第i个元素放到最后

以abcdef举例子。可以看到以下标为i=1开始(假设下标从0开始)的所以下标i+2的元素的相对顺序不变,并且在最后的输出结果排在前面。以下标i=0开始(假设下标从0开始)的所以下标i+2的元素的变化如下图的箭头左边的ace的变化

下面代码样例通过,提交0%, 有没有大佬帮忙看一下

import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        String s = in.nextLine();
        int len = s.length();
        for(int i = 1; i < len; i += 2){
            System.out.print(s.charAt(i));
        }
        LinkedList<Character> list = new LinkedList<>();
        for(int i = 0; i < len; i += 2){
            list.add(s.charAt(i));
        }
        for(int i = 1; i <= len - 2; i++){
            char ch = list.get(0);
            list.remove(0);
            list.add(ch);
        }
        char ch = list.get(list.size() - 2);
        list.remove(list.size() - 2);
        list.add(ch);
        for(int i = 0; i < list.size(); i++){
            System.out.print(list.get(i));
        }
    }
}

全部评论
第二题似乎发现了问题,每一次都是一个类似的操作,可以递归。第一次找出bdf,剩下ace。第二次找出c,剩下ae两个元素的时候就停止迭代。最后将bdf, c, ae拼接。
点赞 回复 分享
发布于 10-15 22:32 北京
第二题直接超时66.7
点赞 回复 分享
发布于 10-15 22:39 重庆
为什么看不懂你第二题的描述
点赞 回复 分享
发布于 10-16 14:46 广东
第一题就一行核心代码,第二题直接stringUuilder,过了79%
点赞 回复 分享
发布于 10-17 19:38 北京
没明白,为什么选取红色箭头的位置元素是不会扣分的
点赞 回复 分享
发布于 10-29 16:56 湖南

相关推荐

点赞 评论 收藏
分享
评论
4
4
分享
牛客网
牛客企业服务