虾皮4.6算法岗笔试 编程题目大意及AC代码

4.9更新:
依然没有收到面试邀请,可能是简历不匹配,也可能是没hc了。
---
之前看大家分享就很焦虑,各种全a也没有面试机会,求求了,给个面试机会吧虾皮。。。

1. 对数据(x,y)有两种操作:两边各加1和两边各乘2,问从(x,y)到(a,b)最少需要几次操作?
bfs
import collections
class Solution:
    def GetMinCalculateCount(self, sourceX, sourceY, targetX, targetY) :
        q = collections.deque([(targetX, targetY)])
        res = 0
        visited = set()
        while q:
            for _ in range(len(q)):
                a, b = q.popleft()
                if a == sourceX and b == sourceY:
                    return res
                elif a > sourceX and b > sourceY:
                    if (a - 1, b - 1) not in visited:
                        visited.add((a - 1, b - 1))
                        q.append((a - 1, b - 1))
                    if a % 2 == 0 and b % 2 == 0 and (a // 2, b // 2) not in visited:
                        visited.add((a // 2, b // 2))
                        q.append((a // 2, b // 2))
            res += 1
        return -1

a = Solution()
a.GetMinCalculateCount(10,100,22,203)
2. 把只含有A和B原字符串变成互逆字符串:
res1 = 0
res2 = 0
s1 = list(s)
s2 = list(s)
# begin with "A" 
pre = "B"
for i in range(len(s)):
    if s1[i] == pre:
        res1 += 1
    pre = "A" if pre == "B" else "B"

# begin with "B" 
pre = "A"
for i in range(len(s)):
    if s1[i] == pre:
        res2 += 1
    pre = "A" if pre == "B" else "B"

print(min(res1, res2))
3. 8皇后原题
n = 4
res = [0]
s1 = set() #row
s2 = set() #column
s3 = set() #diag
def backtracking(idx):
    if idx == n:
        res[0] += 1
        return 
    
    for i in range(n):
        if i not in s1 and i + idx not in s2 and i - idx not in s3:
            s1.add(i)
            s2.add(i + idx)
            s3.add(i - idx)
            backtracking(idx + 1)
            s1.remove(i)
            s2.remove(i + idx)
            s3.remove(i - idx)
backtracking(0)
print(res[0])




#笔试题目#
全部评论
来字节试试嘛!算法缺人!
点赞 回复 分享
发布于 2022-04-06 23:44
这个n皇后好像是原题。。。我是3.19笔试的。。和我那时候一样
点赞 回复 分享
发布于 2022-04-07 14:55

相关推荐

全程1h,面试官水平很高,会一步步追问到底层,给你时间思考是我太菜了项目篇:1.介绍项目背景2.介绍其中一个亮点Java篇:1.hashmap的存储结构?使用哪个类加载器加载的?2.String s = new String("123")会在哪些内存空间分配内存?-- 此处面试官试图转移到JVM失败---3.Object类有哪些常用方法?equals跟hashCode有什么关系吗?4.Object类有跟并发相关的方法吗?-- 此处转移到并发---5.有哪些手段控制多线程并发?6.如何在主线程中启动一组子线程并发处理任务,并在所有子线程任务完成后通知主线程继续执行后续操作(例如记录日志或发送通知)?spring篇:1.spring的事务管理是如何实现的中间件篇:1.Redis 对 CAP 的取舍平衡2.Redis的高可用是如何实现的3.MySql事务的隔离等级?如何实现的?4.快照读是什么?如何实现的?计网篇:1.HTTP报文有哪些部分?2.如何解析 HTTP 协议的报文(字节流)并解析得到数据?算法题:1.快排(口述)2.三数之和(手撕)现在摸清规律了,面试基本上就是先问项目,没啥技术点就转到八股。八股就是每个专题分别问,一个专题中问到你不会的就结束该专题,问下一个专题。因此遇到不会的,应当尽量引导别人问你该专题当中的其他问题,避免一个专题结束时间过快。
虾皮信息一面282人在聊 查看17道真题和解析
点赞 评论 收藏
分享
7 11 评论
分享
牛客网
牛客企业服务