小米 前端 笔试

n道单选 + 1道多选 + 2道算法
选择题不是很难,90%都很基础
第1道算法:
给定3个字符串s t p,判断s中是否有子串t,删除其中的t并在后面追加p,重复这一过程,输出最终的字符串s,如果无限循环则输出-1。我用的模拟,过了90%,超时了。
第2道算法:
类似数独,要求3*3的数组中,填写1~9这9个数字,满足互不重复且上下左右相邻的差值>1,输入是9个数字,0的位置是你要填的,输出满足要求的方案数。我感觉可以用递归,没做出来。
算法我真是一塌糊涂。
全部评论
第二题是绝对值不为1吧
点赞 回复 分享
发布于 10-19 17:47 湖北
编程我都要怀疑赛码网是不是有问题了😅
点赞 回复 分享
发布于 10-19 17:49 陕西
大佬第一题怎么做的,我只过了18,不知道是答案错还是超时
点赞 回复 分享
发布于 10-19 17:54 河南
小米前端招人吗?
点赞 回复 分享
发布于 10-20 22:47 江苏

相关推荐

投递小米集团等公司10个岗位
点赞 评论 收藏
分享
10-19 17:41
已编辑
门头沟学院 算法工程师
唉π_π,10月底还在做笔试选择题25个:图论+二叉树+dp编程两个:两个搜索题。题1:数独public class Main {    private static int[][] dirs = {{0,1},{0,-1},{1,0},{-1,0}};    public static void main(String[] args) {        Scanner in = new Scanner(System.in);        int T = in.nextInt();        while(T-->0){            int[][] map = new int[3][3];            boolean[] vis = new boolean[10];            for(int i=0;i<3;i++){                for(int j=0;j<3;j++){                    map[i][j] = in.nextInt();                    vis[map[i][j]] = true;                }            }            long ans = dfs(0,map,vis);            System.out.println(ans);        }    }    private static long dfs(int i, int[][] map, boolean[] vis){        if(i == 9){            return 1L;        }        int x = i/3;        int y = i%3;        if(map[x][y] != 0){            if(check(x,y,map)){                return dfs(i+1,map,vis);            }else{                return 0L;            }        }        long ret = 0;        for(int j=1;j<=9;j++){            if(vis[j]){                continue;            }            vis[j] = true;            map[x][y] = j;            if(check(x,y,map)){                ret += dfs(i+1,map,vis);            }            map[x][y] = 0;            vis[j] = false;        }        return ret;    }    private static boolean check(int i, int j, int[][] map){        boolean ret = true;        for(int[] d : dirs){            int nx = i+d[0];            int ny = j+d[1];            if(nx<0 || nx>=3 || ny<0 || ny>=3 || map[nx][ny] == 0){                continue;            }            if (Math.abs(map[i][j] - map[nx][ny]) == 1) {                ret = false;                break;            }        }        return ret;    }}题2:感觉数据比较弱,居然过了,笑死public class Main {        public static void main(String[] args) {        Scanner in = new Scanner(System.in);        int a = in.nextInt();        int b = in.nextInt();        int[] vis = new int[b * 10 + 1];        Arrays.fill(vis, Integer.MAX_VALUE);        dfs(b, 0, vis, a);        if (vis[1] == Integer.MAX_VALUE) {            System.out.println(-1);        } else {            System.out.println(vis[1]);        }    }    private static void dfs(int x, int step, int[] vis, int a) {        if (x == 1) {            vis[1] = Math.min(vis[1], step);            return;        }        if (vis[x] != Integer.MAX_VALUE && vis[x] <= step) {            return;        }        if (x % a == 0) {            vis[x] = step;            dfs(x / a, step + 1, vis, a);        }        if (x % 10 != 0) {            int nx = f(x);            vis[x] = step;            dfs(nx, step + 1, vis, a);        }    }    private static int f(int x) {        int ret = 0;        int i = 1;        while (x >= 10) {            int r = x % 10;            x /= 10;            ret += i * r;            i *= 10;        }        return ret * 10 + x;    }}
投递小米集团等公司10个岗位
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务