【问题标题】:Problem solving - Coding Interview Question?解决问题 - 编码面试问题?
【发布时间】:2020-09-20 00:33:16
【问题描述】:

所以我提出了这个模拟面试问题,我必须在不使用函数 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)。

【问题讨论】:

  • 示例:p=[4 2 5 3 1] ⇒ q1=[1 1 1 1 2 2 3 3 3 3 3 4 4 4 5], q2=[4 4 4 4 2 2 5 5 5 5 5 3 3 3 1]
  • 为什么这个标签是python?
  • 我会更改问题的标题。就目前而言,没有任何人想要解决同样的问题。
  • 在 Paolo 的评论之后,一个更具描述性的标题可能是:不使用“repelem”的运行长度解码。另外,在问题文本中包含示例

标签: python matlab vector indexing


【解决方案1】:

这是 Matlab 中的解决方案。

提示:

代码(先自己尝试一下!):

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

【讨论】:

    【解决方案2】:

    用手机输入,所以不确定语法是否正确。

    使用列表推导我们可以展平列表列表,使用 [x]*y 我们可以创建重复 x y 次的列表。

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

    我确定 q2 是相似的吗?

    【讨论】:

      猜你喜欢
      • 2020-07-25
      • 1970-01-01
      • 2020-02-27
      • 1970-01-01
      • 1970-01-01
      • 2017-10-03
      • 2020-07-11
      • 2021-01-09
      • 1970-01-01
      相关资源
      最近更新 更多