我在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?我首先想到的是它们是一个数字的出现次数,后跟数字本身。但从给定的例子来看,似乎还有其他东西需要。
这是什么转变?
答案 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]