4

我在Glassdoor上发现了这个问题:

从一个数字数组生成一个新数组。从头开始。先输入某个数字的数字,然后再输入那个数字。例如,从数组 1, 1, 2, 3, 3, 1 你应该得到 2, 1, 1, 2, 2, 3, 1, 1 写一个程序来解决这个问题。

我不确定我是否明白,1、1、2、3、3、1 怎么会变成 2、1、1、2、2、3、1、1?我首先认为它们是数字的出现次数,然后是数字本身。但是从给定的示例中,似乎还需要其他东西。

这种转变是什么?

4

3 回答 3

2

我首先认为它们是数字的出现次数,然后是数字本身。

你的第一个想法是正确的。

将第一个数组分解为:

1, 1, 
2, 
3, 3, 
1 

第二个是:

2, 1,
1, 2,
2, 3,
1, 1

那么它应该更有意义。

示例实现:

#!/usr/bin/env python

import sys

array = map(int, sys.argv[1:])
print array

count = 0
current = array[0]
index = 1
output = []
for number in array:
    if current != number:
        output.append(count)
        output.append(current)
        current = number
        count = 0
    count += 1
output.append(count)
output.append(current)

print output

演示:

> ./arrays.py 1 1 2 3 3 1   
[1, 1, 2, 3, 3, 1]
[2, 1, 1, 2, 2, 3, 1, 1]
于 2013-02-09T09:26:34.050 回答
0

Haskell 版本……是的,就是这样。

import Data.List
countArray list = concat [[length l, fromIntegral (head l)] | l <- group list]
于 2013-02-09T15:52:40.523 回答
0

你认为是正确的。它是不同元素出现的次数,然后是元素本身。


这是伪代码:

array1 = given input array
array2 = output array

int previous = array1[0];
int currentCount = 0;

for each entry x in array1 {
     if(x == previous) {   
           currentCount++;
      }
     else {
          array2.add(currentCount);
          array2.add(x);   
          //reset global variables for next elements       
          previous = x;
          currentCount = 0;
     }
}
于 2013-02-09T09:31:21.987 回答