求指点今晚腾讯笔试题,实在不明白哪里错了,求解答

今晚腾讯笔试,感觉有两道题都会做的,但是实在不太明白哪里错了,第一道题和第三道题吧,直接贴代码了,求指导:

  1. 给n个数,可以一次选两个不同的数字,然后问,能不能将n个数字删光,一个用例都没过。。。:

    import sys
    def main(nums):
     nums.sort()
     left, right = 0, len(nums) - 1
     while left < right:
         if nums[left] != nums[right]:
             left, right = left + 1, right - 1
         else:
             return 'NO'
     return 'YES'
    if __name__ == '__main__':
     counts = int(sys.stdin.readline().strip())
     sequences = list()
     for _ in range(counts):
         n = int(sys.stdin.readline().strip())
         sequences.append(list(map(int, sys.stdin.readline().strip().split(' '))))
     for nums in sequences:
         print(main(nums))
  2. 是关于丢硬币的,说我复杂度太高,不太明白,用的dfs+***,按理说应该可以的呀,a了0.3,然后那个最终给结果的,有点不太明白,求大佬给简便方法。。。:

    import sys
    def main(n, p, q):
     res = dict()
     *** = dict()
     # x表示有x个硬币朝上
     for x in range(p, n - q + 1):
         res[x] = helper(x, 0, n, ***)
     sums = sum(res.values())
     numerator = 0
     for key, value in res.items():
         numerator += key * value
     k = 0
     while True:
         if ((k * (1e9 + 7)) + numerator) % sums == 0:
             return int(((k * (1e9 + 7)) + numerator) // sums)
         else:
             k += 1
    def helper(target, pos, n, ***):
     if (target, pos) in ***:
         return ***[(target, pos)]
     if target > n - pos or target < 0:
         return 0
     if pos == n:
         return 1 if target == 0 else 0
     ***[(target, pos)] = helper(target - 1, pos + 1, n, ***) + helper(target, pos + 1, n, ***)
     return ***[(target, pos)]
    if __name__ == '__main__':
     line = list(map(int, sys.stdin.readline().split(' ')))
     n, p, q = line[0], line[1], line[2]
     print(main(n, p, q))

求大佬指点...

#腾讯##笔试题目#
全部评论
第一题是只要有一个大于n/2就gg了
点赞 回复 分享
发布于 2019-09-01 22:06
TX是AC多少给多少分吗,还是不AC就GG
点赞 回复 分享
发布于 2019-09-01 22:09
第一题:假如测试用例是[1,1,2,2,2,3,4,5] 那你这就不对了,我觉得应该是记录每个元素的个数,存为count列表,然后再找这个列表中是不是存在若干个元素之和等于len(count)/2,我这个思路能过测试用例,但是最后还是0,我也不清楚为什么。
点赞 回复 分享
发布于 2019-09-01 22:12
可以参考https://www.nowcoder.com/discuss/241659?type=all&order=time&pos=&page=0
点赞 回复 分享
发布于 2019-09-01 22:14
用栈做 相同入栈 不同出栈 最后检查栈里有没有元素 为啥不行呀
点赞 回复 分享
发布于 2019-09-01 22:15
就第一题AC了😥 def check(n,A):     dic = {}     for i in range(n):         dic[A[i]] = dic.get(A[i],0) + 1     max_c = max(list(dic.values()))     if max_c > n/2:         return 'NO'     else:         return 'YES' T = int(input()) for t in range(T):     n = int(input())     A = list(map(int, input().split()))     print(check(n, A))
点赞 回复 分享
发布于 2019-09-01 22:17
if T == 0:     print('YES') for i in range(T):     n = int(input())     inputs = list(map(int, input().split()))     result = dict()     for num in inputs:         if num not in result:             result[num] = 1         else:             result[num] += 1     maxin = 0     for _ in result.values():         maxin = max(maxin, _)     if maxin > (n/2):         print('NO')     else:         print('YES') 这是第一题,a了,就判断重复数字的次数,如果有>n/2的就是NO
点赞 回复 分享
发布于 2019-09-01 22:18
丢硬币败在了取模,最后只有30,求指点
点赞 回复 分享
发布于 2019-09-01 22:19
zushu=int(input()) while(zushu):     arrLen = int(input())     arr = input().split(" ")     dicts = {}     a = 1      for item in arr:         if item in dicts:             dicts[item]+=1          else:             dicts[item]=1     for key in dicts:           if dicts[key] > arrLen//2 :                 a = 0      if a==1:         print("YES")     else:         print("NO")     zushu-=1
点赞 回复 分享
发布于 2019-09-01 22:19
第一题假设7 7 8 8 8 8 8 9 9
点赞 回复 分享
发布于 2019-09-01 22:22
这是求a/b%m的教程。。。。 我算出了期望 不知道怎么求模   https://blog.csdn.net/qq_41939839/article/details/87873887
点赞 回复 分享
发布于 2019-09-01 22:37

相关推荐

昨天 00:16
已编辑
湖北大学 Java
Java抽象带篮子:java简历怎么写可以看看我发的帖子,很详细的
点赞 评论 收藏
分享
评论
1
4
分享

创作者周榜

更多
牛客网
牛客企业服务