小米笔试第一题 求目标数是否可以用数组内数相加

小米第一个编程题,遍历一个数组里是否有某些数相加为目标数,我求的数组组合,然后遍历的,为何通过率才89%,求大神支招#小米#
全部评论
你想要的原理:https://blog.csdn.net/zichen_ziqi/article/details/82184495
点赞 回复 分享
发布于 2018-09-21 00:51
暴力求解法... bool miHomeGiftBag(vector < int > p, int M, int idx) {     if (M<0 || (idx<0 && M>0)) return false;     else if (M==0) return true;     else {         for (int i=idx;i>=0;--i) {             if (miHomeGiftBag(p, M-p[i], i-1)) return true;         }         return false;     } }
点赞 回复 分享
发布于 2018-09-20 20:53
百度搜了一下 0.78
点赞 回复 分享
发布于 2018-09-20 20:50
调了半天的输入输出格式,用自带的输入输出一直0,重新按照题目要求写了输入输出就过了。。。 def miHomeGiftBag(p, M): if M == 0: return 1 if M < 0: return 0 if len(p) == 0: return 0 return miHomeGiftBag(p[1:],M-p[0]) or miHomeGiftBag(p[1:],M) _p_cnt = int(input()) _p = list(map(int, input().split())) _M = int(input()) res = miHomeGiftBag(_p, _M) print(res)
点赞 回复 分享
发布于 2018-09-20 20:48
AC 可以看一下,其实就是背包问题换一下就好了 #!/bin/python # -*- coding: utf8 -*- import sys import os import re #请完成下面这个函数,实现题目要求的功能 #当然,你也可以不按照下面这个模板来作答,完全按照自己的想法来 ^-^  #******************************开始写代码****************************** def  miHomeGiftBag(p, m):     dp = [0 for _ in range(m+1)]     for i in range(len(p)):         for j in range(m,0,-1):             if j >= p[i]:                 dp[j] = max(dp[j],dp[j-p[i]] + p[i])     return dp[-1]==m #******************************结束写代码****************************** N = int(input()) tmp = list(map(int,input().split())) M = int(input())    res=miHomeGiftBag(sorted(tmp), M) print(str(int(res)) + "\n")
点赞 回复 分享
发布于 2018-09-20 20:36

相关推荐

04-03 22:39
重庆大学 Java
点赞 评论 收藏
分享
05-07 17:58
门头沟学院 Java
wuwuwuoow:1.简历字体有些怪怪的,用啥写的? 2.Redis 一主二从为什么能解决双写一致性? 3.乐观锁指的是 SQL 层面的库存判断?比如 stock > 0。个人认为这种不算乐观锁,更像是乐观锁的思想,写 SQL 避免不了悲观锁的 4.奖项证书如果不是 ACM,说实话没什么必要写 5.逻辑过期时间为什么能解决缓存击穿问题?逻辑过期指的是什么 其实也没什么多大要改的。海投吧
点赞 评论 收藏
分享
评论
点赞
6
分享

创作者周榜

更多
牛客网
牛客企业服务