爱奇艺笔试第一题

爱奇艺笔试第一题
例题:
4
110
所以数字从1,2,3,4选,然后组合。
如果第一个放1,因为数组首位是1,但是2,3,4都比1大,因此X;
放2的时候,1比2小,成立,21,但是数组第二位还是1,要找一个比1小的数,没有,X;
放3,第二位放2,第三位放1,满足后一个比前一个小,此时数组第三位是0,要找一个比0大的数放在后面,此时只有4,满足。所以3214.
如果432的时候,1比2小,不满足,所以4321不成立,但是431满足后一个大于前一个,2比1大,对应数组第三个0的限定。所以4312成立。
那么,问题来了。
代码怎么写?

#爱奇艺##笔试题目##秋招#
全部评论
老哥们第一题具体可以参考leetcode46题全排列我觉着差不多😂,我还没写第二题呢
点赞 回复
分享
发布于 2019-09-08 16:26
同求代码
点赞 回复
分享
发布于 2019-09-08 16:00
联想
校招火热招聘中
官网直投
或者编程思路怎么弄?总不能全排列啊然后一个个排除啊。。也许有规律的吧
点赞 回复
分享
发布于 2019-09-08 16:08
求第一题思路
点赞 回复
分享
发布于 2019-09-08 16:11
暴力全排列只过了36%
点赞 回复
分享
发布于 2019-09-08 16:22
😂
点赞 回复
分享
发布于 2019-09-08 16:24
第一题暴力
点赞 回复
分享
发布于 2019-09-08 16:32
dp可以过
点赞 回复
分享
发布于 2019-09-08 16:41
两道题都只A了36%....以为是语言的问题,py换了CPP还是一样,放弃了
点赞 回复
分享
发布于 2019-09-08 16:43
都只A了一点点 import java.util.*; import java.io.*; public class Main1 { public static void main(String[] args) { Scanner cin = new Scanner(System.in); while (cin.hasNext()) { int n = cin.nextInt(); int[] aNums = new int[n-1]; for (int i = 0; i < n-1; ++i) { aNums[i] = cin.nextInt(); } int[] sum = new int[1]; sum[0] = 0; List<Integer> tmp = new LinkedList<>(); genNums(n, tmp, sum, aNums); System.out.println(sum[0]); } } public static void genNums(int n, List<Integer> tmp, int[] sum, int[] aNums) { if (tmp.size() == n) { sum[0] = sum[0] + 1; } else { for (int i = 1; i < n+1; ++i) { if (!tmp.contains(i)) { if (check(tmp, i-1, aNums)) { tmp.add(i); genNums(n, tmp, sum, aNums); tmp.remove(tmp.size()-1); } } } } } public static boolean check(List<Integer> tmp, int i, int[] aNums) { if (tmp.isEmpty()) return true; int pre = tmp.get(tmp.size()-1); int index = tmp.size() - 1; if (aNums[index] == 0) { if (pre < i + 1) { return true; } } else { if (pre > i + 1) { return true; } } return false; } } # ac 27% def solver(n, m): def genNums(n, m, cur): nonlocal tmp, total, dem, retA if m == 0 and n == 0: dem += 1 if check(tmp): retA += 1 else: for i in range(cur, total): p = ['A', 'B', 'C'][cur % 3] if n > 0: tmp.append(p+'0') genNums(n-1, m, i+1) tmp.pop() if m > 0: tmp.append(p+'1') genNums(n, m-1, i + 1) tmp.pop() tmp = [] total = m + n dem = 0 retA = 0 genNums(n, m, 0) ret = float('%.5f' % (retA / dem)) return ret def check(tmp): retA = 0 for n in tmp: # print(n) if n[1] == '0' and n[0] == 'A': retA += 1 break elif n[1] == '0' and n[0] == 'B': break return retA
点赞 回复
分享
发布于 2019-09-10 18:26

相关推荐

2 11 评论
分享
牛客网
牛客企业服务