0

那是一个整数数组[3, 4, 5, 10, 10000] 转换成一个数组/一个类似的列表['1, 2', 3, 4, 5, '6-9', 10, '11-9999', 10000]。这是一个小例子,但很明显,循环从 1 到 10000 的所有数字都无效。

4

2 回答 2

2

假设数组已排序,这一切都归结为:

for i = 0 ... array.Length-1
  write array[i]
  switch( array[i+1] - array[i])
    case 1:
      do nothing;
    case 2:
      write "'" + (array[i]+1) + "'";
    case 3:
      write "'" + (array[i]+1) + " , " + (array[i]+2) + "'"
    default:
      write "'" + (array[i]+1) + " - " + (array[i+1]-1) + "'"
write array[array.Length]

注意:各种开关要坚持您对缺少项目的新数组的“演示”;如果没有必要,只需噘嘴 if(array[i+1]-array[i] > 1)

于 2013-08-16T12:48:15.410 回答
1

设初始数组为 arr[],arr 的长度为 N。所以算法如下:

for(i=0;i<N-1;i++){
    if(ar[i+1]-ar[i]!=1){
        add segment ar[i]+1 to ar[i+1]-1 to new array
    }
    add arr[i] to new array
}

请注意,您应该添加10000+1作为 arr[] 的最后一个值。

于 2013-08-16T12:46:59.983 回答