我在求职面试中被问到这个问题,我想知道其他人如何解决这个问题.我对Java最熟悉,但欢迎使用其他语言的解决方案.
给定一组数字,
nums返回一个数字数组products,其中products[i]是所有数字的乘积nums[j], j != i.Run Code Online (Sandbox Code Playgroud)Input : [1, 2, 3, 4, 5] Output: [(2*3*4*5), (1*3*4*5), (1*2*4*5), (1*2*3*5), (1*2*3*4)] = [120, 60, 40, 30, 24]您必须在
O(N)不使用除法的情况下执行此操作
不久前我在接受采访时,需要解决两个非常有趣的问题.我很好奇你会如何处理这些解决方案.
问题1:
除了当前的一切产品
编写一个函数,将两个长度为len,input和index的整数数组作为输入,并生成第三个数组result,结果如下:result [i] =输入中除输入[index [i]]之外的所有内容的乘积
例如,如果使用len = 4,input = {2,3,4,5}和index = {1,3,2,0}调用该函数,则结果将设置为{40,24,30 ,60}.
重要信息:您的算法必须以线性时间运行.
问题2 :(主题在Jeff帖子中)
洗牌卡甲板均匀
设计(在C++或C#中)一个类Deck代表一张有序的牌组,其中牌组包含52张牌,分为13个等级(A,2,3,4,5,6,7,8,9, 4,J,Q,K)四件套装:黑桃(?),心形(?),钻石(?)和球杆(?).
基于这个类,设计和实现一个有效的算法来洗牌一副牌.牌必须均匀洗牌,也就是说,原牌中的每张牌必须具有相同的概率才能最终进入洗牌牌的任何可能位置.该算法应该在Deck类的方法shuffle()中实现:void shuffle()
算法的复杂程度是多少(作为卡片中卡片数量n的函数)?
解释如何测试您的方法均匀地洗牌(黑盒测试).
PS我有两个小时来编写解决方案代码