从数组中生成一个新数组

时间:2013-02-09 09:22:42

标签: algorithm

我在Glassdoor上找到了这个问题:

  

从数组中生成一个新数组。从头开始。首先输入一些数字,然后输入该数字。例如,从数组1,1,3,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?我首先想到的是它们是一个数字的出现次数,后跟数字本身。但从给定的例子来看,似乎还有其他东西需要。

这是什么转变?

3 个答案:

答案 0 :(得分: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]

答案 1 :(得分: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;
     }
}

答案 2 :(得分:0)

而Haskell版本......是的,这就是整个事情。

import Data.List
countArray list = concat [[length l, fromIntegral (head l)] | l <- group list]