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番目は:

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

あなたが正しいと思うこと。その個別の要素が来る回数、そして要素自体。


ここに擬似コードがあります:

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 に答える
0

そしてHaskellバージョン...うん、それがすべてだ。

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