虾皮笔试4.1

第一题66%(不知道为啥),其他两道都过了

public int[] solution(int[] costs, int coins) {
        int[][] matrix = new int[costs.length][2];
        for (int i = 0; i < matrix.length; i++) {
            matrix[i][0] = costs[i];
            matrix[i][1] = i;
        }

        // 根据价值排序
        Arrays.sort(matrix, new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                if (o1[0] != o2[0]) {
                    return o1[0] - o2[0];
                }
                return o1[1] - o2[1];
            }
        });

        int index = 0;
        ArrayList<Integer> indexs = new ArrayList<>();

        while (index < matrix.length && coins >= 0) {
            if (coins >= matrix[index][0]) {
                indexs.add(matrix[index][1]);
                coins -= matrix[index++][0];
            } else {
                break;
            }
        }

        // 排序下标
        Collections.sort(indexs);
        int[] res = new int[indexs.size()];

        // 将下标转换为值
        for (int i = 0; i < res.length; i++) {
            res[i] = costs[indexs.get(i)];
        }

        return res;
    }

第二道:

public static ListNode Rotate(ListNode head, int k) {
        if (head == null || head.next == null) {
            return head;
        }

        ListNode dummy = new ListNode(-1);
        dummy.next = head;

        // 遍历链表
        ListNode cur = head;
        int length = 0;
        while (cur != null) {
            length++;
            cur = cur.next;
        }

        k = k % length;
        if (k == 0) {
            return head;
        }

        cur = head;
        ListNode pre = null;
        // 找到断开的前后节点
        for (int i = 0; i < length - k; i++) {
            pre = cur;
            cur = cur.next;
        }

        pre.next = null;
        dummy.next = cur;
        // 让cur指向旋转链表的最后一个节点
        while (cur != null && cur.next != null) {
            cur = cur.next;
        }
        cur.next = head;

        return dummy.next;
    }

第三道:

public static String reverses(String original_str) {
        // 每个元素单独处理之后拼接到一起
        String[] splits = original_str.split(" ");
        StringBuilder res = new StringBuilder();

        // 每次循环处理一个
        for (int i = 0; i < splits.length; i++) {
            // 存储初始字符串,然后变为修改后的字符串
            StringBuilder sb = new StringBuilder(splits[i]);
            // 存储小写字母然后反转之后修改sb
            StringBuilder reverse = new StringBuilder();

            // 获取sb中的小写字母并修改成『.』
            for (int j = 0; j < sb.length(); j++) {
                char c = sb.charAt(j);
                if (Character.isLowerCase(c)) {
                    reverse.append(c);
                    sb.replace(j, j + 1, ".");
                }
            }

            reverse.reverse();
            int index = 0; //
            for (int j = 0; j < sb.length(); j++) {
                char c = sb.charAt(j);
                if (c == '.') {
                    sb.replace(j, j + 1, reverse.substring(index, index + 1));
                    index++;
                }
            }

            res.append(sb);
            res.append(" ");
        }
        // 去除最后一个空格
        res.deleteCharAt(res.length() - 1);
        return res.toString();
    }

全部评论
楼主投什么岗位呢
点赞 回复 分享
发布于 2024-04-09 14:42 广东
约面没
点赞 回复 分享
发布于 2024-04-07 15:56 陕西
背包问题,ak了
点赞 回复 分享
发布于 2024-04-01 21:00 江苏
同贪心只过了66
点赞 回复 分享
发布于 2024-04-01 20:58 广东

相关推荐

昨天 00:55
门头沟学院
区域赛银,邀请赛金,打算十二月打下Java基础、背点八股、写个外卖后去投福建小厂的寒假实习,简历应该怎么写呢?以及福州/和厦门有推荐的小厂吗?
牛客53210502...:简历一页:把区域银,邀请赛金标粗,其他的奖除非凑一页否则没有必要写。或者多页:每个站一行这样都列出来。项目经历看看牛客其他人是怎么写的,写的不好呢。简历打磨好按部就班没问题的
点赞 评论 收藏
分享
11-04 19:05
已编辑
东莞城市学院 单片机
不知道怎么取名字_:你这个要实习两年?哪有这么久的,感觉就是即使你毕业了,但还按实习的话,是不是不用给你缴社保公积金啥的
点赞 评论 收藏
分享
评论
8
7
分享

创作者周榜

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