2022.8.31 途虎养车笔试

笔试编程题情况

第一题:遍历二叉树
public class Main1 {
    public class TreeNode {
        int val = 0;
        TreeNode left = null;
        TreeNode right = null;

        public TreeNode(int val) {
            this.val = val;
        }
    }
    Set<Integer> set = new HashSet<>();
    public int numColor(TreeNode root) {
        // write code here
        dfs(root);
        return set.size();
    }

    private void dfs(TreeNode root) {
        if(root==null){
            return;
        }
        set.add(root.val);
        dfs(root.left);
        dfs(root.right);
    }
}

第二题:动态规划,力扣硬币原题(爆搜超时)
public class Main2 {
    
    public int change (int[] oils, int box) {
        // write code here
        int[] dp = new int[box+1];
        Arrays.fill(dp,box+1);
        dp[0]=0;
        for (int i = 1; i <= box; i++) {
            for (int j = 0; j < oils.length; j++) {
                if(oils[j]<=i){
                    dp[i]=Math.min(dp[i],dp[i-oils[j]]+1);
                }
            }
        }
        return dp[box]>box?-1:dp[box];
    }
}

第三题:动态规划 or 回溯 ,力扣原题
public class Main3 {
    Set<Integer>[] sets ;
    int[][] arr;
    int res = Integer.MAX_VALUE;
    public int minimumIncompatibility(int[] nums, int k) {
        // write code here
        int len = nums.length;
        Arrays.sort(nums);
        int t = len / k;
        int[] tong = new int[nums.length + 1];
        for (int num : nums) {
            tong[num]++;
        }
        for (int num : tong) {
            if (num > k) {
                return -1;
            }
        }
        sets = new HashSet[k];
        for (int i = 0; i < k; i++) {
            sets[i] = new HashSet<>();
        }
        arr = new int[k][2];
        for (int i = 0; i < k; i++) {
            arr[i][0] = Integer.MAX_VALUE;
            arr[i][1] = Integer.MIN_VALUE;
        }
        dfs(nums,0,k,t);
        return res;
    }

    private void dfs(int[] nums, int cur,int k,int t) {
        if(cur>=nums.length){
            int sum=0;
            for (int i = 0; i < k; i++) {
                sum+=arr[i][1]-arr[i][0];
            }
            res=Math.min(res,sum);
            return;
        }
        for (int i = 0; i < k; i++) {
            Set<Integer> set2 = sets[i];
            if (t==set2.size() || set2.contains(nums[cur])){
                continue;
            }
            set2.add(nums[cur]);
            int min = arr[i][0];
            int max = arr[i][1];
            arr[i][0]=Math.min(min,nums[cur]);
            arr[i][1]=Math.max(max,nums[cur]);
            dfs(nums,cur+1,k,t);
            set2.remove(nums[cur]);
            arr[i][0]=min;
            arr[i][1]=max;
            if(set2.size()==0){
               break;
            }
        }
    }
}

感觉题目阶梯难度挺好的,简单中等困难都有



#途虎养车#
全部评论
最后一题我return -1,实在不想写了😂
5 回复 分享
发布于 2022-08-31 21:45 安徽
是核心模式啊 ?
点赞 回复 分享
发布于 2022-09-02 16:02 上海
哥们,第二题是不是题目看错了?
1 回复 分享
发布于 2022-08-31 20:38 广西
你好 请问它有规定语言吗 还是可以自己选的
点赞 回复 分享
发布于 2023-03-16 11:44 上海
上海Java有人收到面试通知了么
点赞 回复 分享
发布于 2022-09-07 11:54 江苏
ac2.25,一道题都没做过
点赞 回复 分享
发布于 2022-09-01 16:14 江苏
同学试试恒生,内推码ESKWS3 也可以看我帖子直接投递
点赞 回复 分享
发布于 2022-08-31 21:52 河南
第二题这是不是有问题,我一开始用dp才对22%,然后改用dfs+贪心,一直转圈不出答案,我都写了box小于零就return,box为0就直接退出返回结果。
点赞 回复 分享
发布于 2022-08-31 21:01 广西
挺强
点赞 回复 分享
发布于 2022-08-31 20:51 上海
我太菜了,第三题写不出来,最后暴力解才34%
点赞 回复 分享
发布于 2022-08-31 20:46 广东
第三题是leetcode那道题?一直通过34%
点赞 回复 分享
发布于 2022-08-31 20:45 四川

相关推荐

评论
7
24
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务