【问题标题】:How to find last index of shortest run in an Array? [closed]如何找到数组中最短运行的最后一个索引? [关闭]
【发布时间】:2017-05-18 01:02:58
【问题描述】:

我已经制定了以下逻辑。最短运行:具有相同元素的原始数组的子数组。

// "A" is Array, p is length of a current run, q is global variable that stores lowest run length
procedure(){
    while( i < sizeOfArray){
     if(A[i]==A[i+1]){
     //1.Increment a variable "p" to capture the length of run
      //2. compare p and q and which ever is smaller , is saved into q
      }else{
     //3. What to do here ?
     } 
    }
return q;
}

【问题讨论】:

  • 仍然不是有效的 C 代码。您的问题表明您的逻辑“总是返回错误”。如果您还没有编写任何代码,这意味着什么?相关逻辑并未以您所展示的方式表达。你需要付出一些努力才能让任何人帮忙。
  • @DavidBowling 我重新表述了这个问题。问问题的动机是了解逻辑而不是编程代码。您可以使用任何语言来显示答案。谢谢

标签: c arrays algorithm sorting


【解决方案1】:

我假设基于您的代码的“最短运行”意味着数组中所有数字都相同的最短序列。下面的算法将找到最短行的最后一个索引。请注意,它会找到第一个最短的运行,因为有多个相同大小的运行。

int A[10] = {1,1,1,1,2,2,2,3,3,3};
int q = INT_MAX, i = 0, p = 1, lastIndex = 0;
while( i != 9 ){ //10 is the size of the array
        if(A[i]==A[i+1]){
                ++p;
        }else{
                if(p < q) {
                        q = p;
                        lastIndex = i;
                }
                p = 1; //reset p, the size of the run should be 1
        }
        i++;
}
return lastIndex; 

请注意,要找到最短的运行,在运行结束后比较 p 和 q,因此在 else 语句中比较它们。上面的示例返回 6,其中 A[6] 为 2,即最小运行的最后一个索引,大小为 3。

【讨论】:

  • 回答不费吹灰之力而只是寻求解决方案的问题不是一个好习惯。
  • 我觉得大体思路是对的,但也有一些错误。例如。数组索引超出范围,我将从 i = 1 开始并与 i-1 进行比较,以避免该陷阱。或者如果最后一次运行是最小的,你会错过它。我没有反对意见。
  • 当最终运行最短时逻辑失败,因为循环终止时p 没有与q 进行比较。例如,A[10] = {1,1,1,1,2,2,2,2,3,3} 失败,报告 3。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-14
相关资源
最近更新 更多