滴滴笔试,大佬们看看我哪里又问题吗

1. 桃子装箱
n个桃子,每个重ai,尽可能多的装入一个箱子,要求箱子内最终的桃子重量不能超过平均重量的k倍,问最多能装多少个桃子?
输入:
第一行n和k。
第二行n个数,对应每个桃子的重量。
输出:最多能装的数量
例子:
输入:
5 2
3 10 5 4 2
输出:
4
package writeexam.didi0904;

import java.util.*;
/**
 * 输入描述:
 * 输入数据有多组, 每行表示一组输入数据。
 * 每行不定有n个整数,空格隔开。(1 <= n <= 100)。
 *
 * next()不会获取字符前/后的空格/Tab键,只获取字符。
 * 开始获取字符(字符前后不算)直到遇到空格/Tab键/回车截止获取;nextLine()会获取字符前后的空格/Tab键,遇到回车键截止。
 */
public class Problem01 {
    public static ArrayList<ArrayList<Integer>> res = new ArrayList<>();

    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        // 1. 输入数据
        int n = sc.nextInt();
        int k = sc.nextInt();
        int[] weights = new int[n];
        for(int i = 0; i < n; i ++){
            weights[i] = sc.nextInt();
        }

        // 2. 重复元素,不可重复选, 组合问题
        Arrays.sort(weights);
//        for(int i = 0; i < n; i ++){
//            System.out.print(weights[i] + " ");
//        }
        // 3. 回溯所有组合情况
        ArrayList<Integer> route = new ArrayList<>();
        backTrace(weights, 0, route, k);
        int maxCount = 0;
        for(ArrayList<Integer> e:res){
            // System.out.println("route: " + route);
            maxCount = Math.max(maxCount, e.size());
        }
        System.out.println(maxCount);
    }

    public static void backTrace(int[] weights, int start, ArrayList<Integer> route, int k){
        if(route.size() > 0){
            if(isValid(route, k)){
                // System.out.println("route:" + route);
                res.add(new ArrayList<>(route));
            }else{
                return;
            }
        }

        for(int i = start; i < weights.length; i++){
//            if(i > start && weights[i] == weights[i - 1]){
//                continue;
//            }
            route.add(weights[i]); // 做出选择
            backTrace(weights, i + 1, route, k);
            route.remove(route.size() - 1); // 撤销选择
        }
    }

    public static boolean isValid(ArrayList<Integer> route, int k){

        int maxValue = route.get(route.size() - 1);
        // System.out.println("maxValue: " + maxValue);
        int total = 0;
        for(int num : route){
            total += num;
        }
        return (maxValue * 1.0) > ((total / route.size()) * k) ? false : true;
    }
}

2. 老张的美术课
对于每个非负整数都有一个美丽值,美丽值定义为这个数十进制下每个数位的异或和,如123的美丽值是1^2^3=0。问对于一个闭区间[L, R]中所有的整数,美丽值恰好为t的数有多少个?
输入:
第一行一个正整数T,代表T个询问
第二行T个非负整数,Li
第三行T个非负整数,Ri
第四行T个非负整数,ti

输出:
每个询问输出一个整数,每个输出用空格隔开

例子:
输入:
2
0 1
0 10
0 1
输出:
1 2
package writeexam.didi0904;

import org.junit.Test;

import java.util.ArrayList;
import java.util.Scanner;

/**
 * 输入描述:
 * 输入数据有多组, 每行表示一组输入数据。
 * 每行不定有n个整数,空格隔开。(1 <= n <= 100)。
 *
 * next()不会获取字符前/后的空格/Tab键,只获取字符。
 * 开始获取字符(字符前后不算)直到遇到空格/Tab键/回车截止获取;nextLine()会获取字符前后的空格/Tab键,遇到回车键截止。
 */
public class Problem02 {

    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int T = sc.nextInt();
        int t = T;
        ArrayList<Integer> res = new ArrayList<>(); // 保存结果
        int[][] arr = new int[T][2];
        for(int j = 0; j < T; j++){
            arr[j][0] = sc.nextInt();
            arr[j][1] = sc.nextInt();
        }
//        for(int i = 0; i < arr.length; i++){
//            System.out.println(arr[i][0] +" "+ arr[i][1]);
//        }
        int[] arr_t = new int[T];
        arr_t[0] = sc.nextInt();
        arr_t[1] = sc.nextInt();

        for(int s = 0; s < T; s++){
            int left = arr[s][0];
            int right = arr[s][1];
            int len = right - left + 1;
            // System.out.println(left + " " + right);
            int[] dp = new int[len];
            dp[0] = isValid(left, arr_t[s]) ? 1 : 0;
            for(int i = 1; i < len; i++){
                left++;
                if(isValid(left, arr_t[s])){
                    dp[i] = dp[i - 1] + 1;
                }else{
                    dp[i] = dp[i - 1];
                }

            }
            res.add(dp[len - 1]);
            System.out.print(dp[len - 1] + " ");
        }
    }

    public static boolean isValid(int num, int t){
        char[] a = String.valueOf(num).toCharArray();
        int result = a[0] - 48;
        for(int i = 1; i < a.length; i++){
            result = result ^ (a[i] - 48);
        }
        return result == t ? true : false;
    }
}


#滴滴笔试##滴滴23秋招笔试有点儿难啊#
全部评论
求问,这是滴滴的正式批还是提前批次的笔试
1 回复 分享
发布于 2022-09-04 21:39 甘肃
hi~同学,秋招遇“寒气”,牛客送温暖啦!23届秋招笔面经有奖征集中,参与就得牛客会员7天免费体验,最高赢300元京东卡!戳我去看>>>https://www.nowcoder.com/link/zhengjipinglun
点赞 回复 分享
发布于 2022-09-05 14:06 北京
过了多少?
点赞 回复 分享
发布于 2022-09-05 16:33 北京
问一下约面了吗
点赞 回复 分享
发布于 2022-09-20 16:38 辽宁

相关推荐

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