题解 | #素数伴侣#给个不一样的解法:建图+贪心

素数伴侣

https://www.nowcoder.com/practice/b9eae162e02f4f928eac37d7699b352e

将可以组成 素数伴侣 的一对数字 看成 相连的两个节点,建一个无向图,并统计每个节点的

每次从节点中选择 度 最小 的节点,再选择与它相连的 度 最小的节点。之后将他们从图中删除

import math

n = int(input())
nums = list(map(int, input().split()))

def isPrime(x):
    if x == 2:
        return True
    for d in range(2, int(math.sqrt(x))+1):
        if x%d == 0:
            return False
    return True

# 能组成一对素数伴侣的下标,建立成无向图
G = [set() for _ in range(n)]
for i in range(len(nums)):
    for j in range(i+1, len(nums)):
        if isPrime(nums[i]+nums[j]):
            G[i].add(j)
            G[j].add(i)

# 统计节点的度
degrees = [len(G[i]) for i in range(n)]
res = 0
def deleteNode(x):
    # 从图中删除节点
    degrees[x] = 0
    for y in G[x]:
        G[y].discard(x)
        degrees[y] -= 1
    G[x].clear()

while True:

    # 找到度最小的节点
    minn = 1000000000
    x = -1
    for i in range(n):
        if degrees[i] > 0:
            if degrees[i] < minn:
                minn = degrees[i]
                x = i
    if x == -1:
        break
    minn = 1000000000
    y = -1
    
    # 从找到节点的邻接节点中再找一个度最小的节点
    for i in G[x]:
        if degrees[i] > 0:
            if degrees[i] < minn:
                minn = degrees[i]
                y = i
    if y == -1:
        break
    # 删除这两个节点
    deleteNode(x)
    deleteNode(y)
    res += 1
print(res)

全部评论

相关推荐

05-26 10:24
门头沟学院 Java
qq乃乃好喝到咩噗茶:其实是对的,线上面试容易被人当野怪刷了
找工作时遇到的神仙HR
点赞 评论 收藏
分享
06-27 12:54
已编辑
门头沟学院 Java
累了,讲讲我的大学经历吧,目前在家待业。我是一个二本院校软件工程专业。最开始选专业是觉得计算机感兴趣,所以选择了他。本人学习计算机是从大二暑假结束开始的,也就是大三开始。当时每天学习,我个人认为Java以及是我生活的一部分了,就这样持续学习了一年半,来到了大四上学期末,大概是在12月中旬,我终于找的到了一家上海中厂的实习,但我发现实习生的工作很枯燥,公司分配的活也不多,大多时间也是自己在自学。就这样我秋招末才找到实习。时间来到了3月中旬,公司说我可以转正,但是转正工资只有7000,不过很稳定,不加班,双休,因为要回学校参加答辩了,同时当时也是心高气傲,认为可以找到更好的,所以放弃了转正机会,回学校准备论文。准备论文期间就也没有投递简历。然后时间来到了5月中旬,这时春招基本也结束了,然后我开始投递简历,期间只是约到了几家下场面试。工资也只有6-7k,到现在我不知道该怎么办了。已经没有当初学习的心劲了,好累呀,但是又不知道该干什么去。在家就是打游戏,boss简历投一投。每天日重一次。26秋招都说是针对26届的人,25怎么办。我好绝望。要不要参加考公、考研、央国企这些的。有没有大佬可以帮帮我。为什么感觉别人找工作都是顺其自然的事情,我感觉自己每一步都在艰难追赶。八股文背了又忘背了又忘,我每次都花很长时间去理解他,可是现在感觉八股、项目都忘完了。真的已经没有力气再去学习了。图片是我的简历,有没有大哥可以指正一下,或者说我应该走哪条路,有点不想在找工作了。
码客明:太累了就休息一下兄弟,人生不会完蛋的
如果实习可以转正,你会不...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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