虾皮4.6笔试情况

单选题主要考察智商了,多选题还好。
编程题AC了2.7,不过不抱有希望,虾皮只是走流程而已。

第一题,互斥字符串:相邻两个字符不同。给你一个字符串,只包含AB两种字符,你可以对任何一个字符改变,比如A改为B,B改为A,问把这个字符串改为互斥字符串的最小次数。
比如ABB,只需要将最后一个B改为A即可。
这道题直接暴力,分别看凑出ABAB。。。和BABA。。。的最小次数就行了。挺像动态规划的,因为状态和选择都有,求的也是字符串的最大或者最小,但是我做过的题一般是两个字符串多,比如编辑距离,所以这个没想到用dp怎么做。

第二题,n皇后问题,坑的就是虾皮的编辑器提示我不通过,我以为我算法问题,浪费了40分钟后发现原来我的全局函数res没放上去,发现这个错误还是我重新将代码cv上突然ac,惊呆了我。

第三题,给你4个数,a,b,A,B,可以有两种操作,对a和b同时加一,对a和b同时乘2,问转化为A,B的最小操作次数,不能转换输出-1.
第二题浪费了很多时间,第三题时间也够,不过是在没思路,投机取巧下发现输出-1,通过30%,输出0,通过10%,输出2,给30%,输出5,给10%,这种情况应该给80%,但是最后只凑出了70%,几个if else而已,有时间好好思考下。
附上第三题凑数code
    public long GetMinCalculateCount(long sourceX, long sourceY, long targetX, long targetY) {
        // write code here
        if (targetX == sourceX && targetY == sourceY) return 0;
        if (targetX <= sourceX || targetY <= sourceY) return -1;
        if (sourceX + 2 == targetX && sourceY + 2 == targetY ||
                sourceX * 4 == targetX && sourceY * 4 == targetY ||
                (sourceX + 1) * 2 == targetX && (sourceY + 1) * 2 == targetY ||
                sourceX * 2 + 1 == targetX && sourceY * 2 + 1 == targetY) return 2;
        return targetX % sourceX == 0 ? 5 : -1;
    }
来一个回溯暴力破解,时间复杂度最坏2的n次方,可以用dp,应该可以控制在n2,明天试下
int res = Integer.MAX_VALUE;

    public long GetMinCalculateCount(long sourceX, long sourceY, long targetX, long targetY) {
        // write code here
        traverse(sourceX, sourceY, targetX, targetY, 0);
        return res == Integer.MAX_VALUE ? -1 : res;
    }

    private void traverse(long sourceX, long sourceY, long targetX, long targetY, int step) {
        if (sourceX > targetX || sourceY > targetY) return;
        if (sourceX == targetX && sourceY == targetY) {
            res = Math.min(res, step);
            return;
        } else if (sourceX == targetX && sourceY == targetY || sourceX != targetX && sourceY == targetY) return;
        traverse(sourceX + 1, sourceY + 1, targetX, targetY, step + 1);
        traverse(sourceX * 2, sourceY * 2, targetX, targetY, step + 1);
    }



#虾皮##实习##笔试题目#
全部评论
是的,我在脉脉上看了,别人华科2.8/3都没面试。。。纯纯的走流程
1 回复 分享
发布于 2022-04-06 22:33
我第三题dfs过了
点赞 回复 分享
发布于 2022-04-06 21:31
long long tx,ty; long long GetMinCalculateCount(long long sourceX, long long sourceY, long long targetX, long long targetY) { tx = targetX; ty = targetY; return func(sourceX, sourceY); } long long func(long long sx,long long sy){ if(sx>tx||sy>ty) return -1; if(sx==tx&&sy==ty) return 0; long long t1,t2; t1 = func(sx+1, sy+1)+1; t2 = func(sx*2, sy*2)+1; if(t1==-1&&t2==-1) return -1; if(t1==-1) return t2; if(t2==-1) return t1; return min(t1, t2); } 能帮我看看为啥第三题只过了90%吗
点赞 回复 分享
发布于 2022-04-06 22:17

相关推荐

1 7 评论
分享
牛客网
牛客企业服务