我在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?我首先认为它们是数字的出现次数,然后是数字本身。但是从给定的示例中,似乎还需要其他东西。
这种转变是什么?
我在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?我首先认为它们是数字的出现次数,然后是数字本身。但是从给定的示例中,似乎还需要其他东西。
这种转变是什么?
我首先认为它们是数字的出现次数,然后是数字本身。
你的第一个想法是正确的。
将第一个数组分解为:
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]
Haskell 版本……是的,就是这样。
import Data.List
countArray list = concat [[length l, fromIntegral (head l)] | l <- group list]
你认为是正确的。它是不同元素出现的次数,然后是元素本身。
这是伪代码:
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;
}
}