2013-02-09 38 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]