2013-02-09 39 views
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?我首先想到它们是数字出现的次数,然后是数字本身。但是从给出的例子来看,似乎还有其他东西是需要的。

这是什么转变?

+0

它们是什么想说的是_“拿号的列表。怎么算多次在列表中出现的每个号码,并创建一个新的列表,列出每个数字的计数” ._ – 2013-02-09 09:28:59

+0

它有点暧昧。的次数连续出现数或时间的数字,这个数字后出现了一些?两者都给出了相同的结果。我不认为这个问题适合于SO。 – nawfal 2013-02-09 09:30:04

+0

@BurhanKhalid它与你所描述的更接近,但是当你遇到数组中的不同元素时,你不得不重置计数器。检查最后一个数字1.它在结果列表的末尾引起1,1。 – 2013-02-09 09:54:02

回答

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] 
+0

哦,谢谢!我感到困惑的最后2个1的,现在做多大意义:) – 2013-02-09 09:29:55

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; 
    } 
} 
+0

假设了'数组1 [0] == INT_MAX'? – Johnsyweb 2013-02-09 09:33:24

+0

没有,只是想有一定的价值是不是在阵列1。 – 2013-02-09 09:35:34

+1

但在你的代码中,如果我们有1,1,2 ..它将首先放1,1,..而不是2,1,...因为当我们第一次遇到1时,它不等于先前的变量,我们最终将它添加到结果数组中。但第二次,我们再次遇到1,这次它等于上一次,但计数器是0 ..所以它不会输出2,1,...对吗? – 2013-02-09 09:40:25

0

而哈斯克尔版本...是啊,这就是整个事情。

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