生成数字
我首先想到的是他们是数字出现的次数,后面跟着数字本身。
你的第一想法是正确的。
打破第一阵列下拉至:
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]
哦,谢谢!我感到困惑的最后2个1的,现在做多大意义:) – 2013-02-09 09:29:55
什么ü觉得是正确的。它是独立元素出现的次数,然后是元素本身的次数。
这里是伪代码:
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;
}
}
假设了'数组1 [0] == INT_MAX'? – Johnsyweb 2013-02-09 09:33:24
没有,只是想有一定的价值是不是在阵列1。 – 2013-02-09 09:35:34
但在你的代码中,如果我们有1,1,2 ..它将首先放1,1,..而不是2,1,...因为当我们第一次遇到1时,它不等于先前的变量,我们最终将它添加到结果数组中。但第二次,我们再次遇到1,这次它等于上一次,但计数器是0 ..所以它不会输出2,1,...对吗? – 2013-02-09 09:40:25
而哈斯克尔版本...是啊,这就是整个事情。
import Data.List
countArray list = concat [[length l, fromIntegral (head l)] | l <- group list]
它们是什么想说的是_“拿号的列表。怎么算多次在列表中出现的每个号码,并创建一个新的列表,列出每个数字的计数” ._ – 2013-02-09 09:28:59
它有点暧昧。的次数连续出现数或时间的数字,这个数字后出现了一些?两者都给出了相同的结果。我不认为这个问题适合于SO。 – nawfal 2013-02-09 09:30:04
@BurhanKhalid它与你所描述的更接近,但是当你遇到数组中的不同元素时,你不得不重置计数器。检查最后一个数字1.它在结果列表的末尾引起1,1。 – 2013-02-09 09:54:02