725用友Java开发笔试

选择太难了,而且每部分都要提交了才能看下一部分的题,搞得我好紧张,又怕前面的题选的太草率丢分多,又怕时间都浪费在前边了编程题没时间做。SQL的题以前只背了八股每怎么练过,就直接放弃了,结果两道编程题做完还有8分多钟干瞪眼。呜呜能不能全部做完提交了还有时间的话再给点时间反刍前边的题呀,太心疼那道SQL了。
编程题1:大概是有一个九键手机键盘,每个键代表三个或四个字符,如果想按某个键的第一个字符就要按这个键一下,如果想按某个键的第二个字符就要按这个键两下以此类推,问给定一个字符串,统计按下某个键的次数,以列表数组形式输出。
    public int[][] count(String str) {
        // write code here
        if (str == null || str.length() == 0) {
            return new int[0][0];
        }
        int n = str.length();
        HashMap<Integer, Integer> map = new HashMap<>();
        char c;
        for (int i = 0; i < n; i++) {
            c = str.charAt(i);
            if (c == '@' || c == '!' || c == '.' || c == '/') {
                if (c == '@') {
                    map.put(1, map.getOrDefault(1, 0) + 1);
                } else if (c == '!') {
                    map.put(1, map.getOrDefault(1, 0) + 2);
                } else if (c == '.') {
                    map.put(1, map.getOrDefault(1, 0) + 3);
                } else if (c == '/') {
                    map.put(1, map.getOrDefault(1, 0) + 4);
                }
            }
            if (c == 'a' || c == 'b' || c == 'c') {
                if (c == 'a') {
                    map.put(2, map.getOrDefault(2, 0) + 1);
                } else if (c == 'b') {
                    map.put(2, map.getOrDefault(2, 0) + 2);
                } else if (c == 'c') {
                    map.put(2, map.getOrDefault(2, 0) + 3);
                }
            }
            if (c == 'd' || c == 'e' || c == 'f') {
                if (c == 'd') {
                    map.put(3, map.getOrDefault(3, 0) + 1);
                } else if (c == 'e') {
                    map.put(3, map.getOrDefault(3, 0) + 2);
                } else if (c == 'f') {
                    map.put(3, map.getOrDefault(3, 0) + 3);
                }
            }
            if (c == 'g' || c == 'h' || c == 'i') {
                if (c == 'g') {
                    map.put(4, map.getOrDefault(4, 0) + 1);
                } else if (c == 'h') {
                    map.put(4, map.getOrDefault(4, 0) + 2);
                } else if (c == 'i') {
                    map.put(4, map.getOrDefault(4, 0) + 3);
                }
            }
            if (c == 'j' || c == 'k' || c == 'l') {
                if (c == 'j') {
                    map.put(5, map.getOrDefault(5, 0) + 1);
                } else if (c == 'k') {
                    map.put(5, map.getOrDefault(5, 0) + 2);
                } else if (c == 'l') {
                    map.put(5, map.getOrDefault(5, 0) + 3);
                }
            }
            if (c == 'm' || c == 'n' || c == 'o') {
                if (c == 'm') {
                    map.put(6, map.getOrDefault(6, 0) + 1);
                } else if (c == 'n') {
                    map.put(6, map.getOrDefault(6, 0) + 2);
                } else if (c == 'o') {
                    map.put(6, map.getOrDefault(6, 0) + 3);
                }
            }
            if (c == 'p' || c == 'q' || c == 'r' || c == 's') {
                if (c == 'p') {
                    map.put(7, map.getOrDefault(7, 0) + 1);
                } else if (c == 'q') {
                    map.put(7, map.getOrDefault(7, 0) + 2);
                } else if (c == 'r') {
                    map.put(7, map.getOrDefault(7, 0) + 3);
                } else if (c == 's') {
                    map.put(7, map.getOrDefault(7, 0) + 4);
                }
            }
            if (c == 't' || c == 'u' || c == 'v') {
                if (c == 't') {
                    map.put(8, map.getOrDefault(8, 0) + 1);
                } else if (c == 'u') {
                    map.put(8, map.getOrDefault(8, 0) + 2);
                } else if (c == 'v') {
                    map.put(8, map.getOrDefault(8, 0) + 3);
                }
            }
            if (c == 'w' || c == 'x' || c == 'y' || c == 'z') {
                if (c == 'w') {
                    map.put(9, map.getOrDefault(9, 0) + 1);
                } else if (c == 'x') {
                    map.put(9, map.getOrDefault(9, 0) + 2);
                } else if (c == 'y') {
                    map.put(9, map.getOrDefault(9, 0) + 3);
                } else if (c == 'z') {
                    map.put(9, map.getOrDefault(9, 0) + 4);
                }
            }
        }
        int[][] ans = new int[map.keySet().size()][2];
        int idx = 0;
        for (int i = 0; i < 9; i++) {
            if (map.get(i + 1) != null) {
                ans[idx][0] = i + 1;
                ans[idx][1] = map.get(i + 1);
                idx++;
            }
        }
        return ans;
    }
编程题第二题:给一个01组成的数组,和一个整数n,最多有n次将任意数反转的机会,问能得到的最长连续相同字符的子数组长度是多少,刚开始想用动规,但是有点解不出来,最后用了双指针。
    public int getMaxConsecutiveOnes(int[] arr, int n) {
        // write code here
        int left = 0;
        int count = 0;
        int max = 0;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == 1) {
                continue;
            } else if (arr[i] == 0 && count < n) {
                count++;
            } else {
                max = Math.max(max, (i - left));
                while (arr[left] != 0) {
                    left++;
                }
                left++;
            }
        }
        max = Math.max(max, arr.length - left);
        return max;
    }



#用友#
全部评论
你们的笔试结果出来了没
1 回复 分享
发布于 2022-07-27 18:51
大佬,笔试编程题是核心代码还是acm模式
1 回复 分享
发布于 2022-08-01 11:48
最后一题好像是滑动窗口
点赞 回复 分享
发布于 2022-07-26 11:52
约面试了 但是告诉我笔试太差 高潜批次要求达不到 给我搞成提前批内推了
点赞 回复 分享
发布于 2022-07-27 21:41
这个第二题是求最长的连续的1的个数吧
点赞 回复 分享
发布于 2022-07-28 19:58

相关推荐

3 20 评论
分享
牛客网
牛客企业服务