问题解决-编码面试有问题吗?

时间:2020-06-01 16:40:00

标签: python matlab vector indexing

所以我遇到了这个模拟面试问题,我必须在不使用函数repelem或repmat的情况下找到该问题的解决方案。 格式只允许3行代码:(每行只允许一个=运算符)
p = ...,q1 = ....,q2 = ....,

到目前为止,我只获得了使用repelem的解决方案,但是当我尝试更改代码时,索引时总是必须使用更多的代码行。非常感谢您给我的任何提示:)

p=[4 2 5 3 1]

q1 = repelem((1:length(p)),p)
q2 = repelem(p,p)

这是一个问题,如果有人想自己尝试(为MATLAB设计,但可以在任何地方完成)

让p是具有k个不同的正整数元素且s = sum(p)的向量。必须确定两个向量q1和q2:

•q1是长度为s的向量。 q1的前p(1)个元素等于1,接下来的p(2)个元素等于2,...。 。 。 ,最后p(k)个元素等于k。

•q2是长度为s的向量。 q2的前p(1)个元素等于p(1),接下来的p(2)个元素等于p(2),...。 。 。 ,最后的p(k)个元素等于p(k)。

2 个答案:

答案 0 :(得分:2)

这是 Matlab 中的解决方案。

提示:

代码(请先尝试一下!):

p = [4 2 5 3 1]; % example input
q1 = nonzeros(((1:max(p)).'<=p).*(1:numel(p))).';
q2 = p(q1);

答案 1 :(得分:1)

通过电话输入此内容,因此不确定语法是否正确。

使用列表理解,我们可以将列表的列表展平,并使用[x] * y创建一个重复x y次的列表。

q1 = [e for l in [[i+1]*px for i,px in enumerate(p)] for e in l]

确定q2相似吗?