【问题标题】:Java find best way to solve checking Continuous numbers [Algorithm]Java找到解决检查连续数字的最佳方法[算法]
【发布时间】:2015-08-11 21:19:12
【问题描述】:

我试图找到优雅的方法来解决一个问题。

Issue : Check few numbers continuity.

Value : Start number, End Number (Each Number Group)

例如有组。

First Group : Start 1, End 90
Second Group : Start 91, End 180
Third Group : Start 181, End 225
Forth Group : Start 226, End 310
Fifth Group : Start 311, End 360

您可以查看上面的列表,组正在连接

First Group End : 90 , Second Group Start 91.
Second Group End : 180, Third Group Start 181.

所以所有组号都连接在一起。

Then results is correct, Status show correct

But if there is disconnecting point, status should be not correct.

不正确的示例。

First Group : Start 1, End 90
Second Group : Start 94, End 180
Third Group : Start 181, End 225  

First Group End 90, Second Group Start 94. So it's not continuous numbers.

我可以把ArrayLists一一检查, 但我想知道有人有优雅的解决方案来制作动态逻辑吗?

我的解决方案可能是。

ArrayList<Integer> ArrStartRawData = new ArrayList<Integer>();
ArrayList<Integer> ArrEndRawData = new ArrayList<Integer>();

ArrStartRawData.add(Group[0].start);
ArrEndRawData.add(Group[0].end);
ArrStartRawData.add(Group[1].start);
ArrEndRawData.add(Group[1].end);
ArrStartRawData.add(Group[2].start);
ArrEndRawData.add(Group[2].end);

String status = "";
for(int z=0; z < ArrEndRawData.size() ; z++){
    Integer num = ArrEndRawData.get(z);
    if(z != ArrEndRawData.size()-1) {
        if((ArrStartRawData.get(z+1)-ArrEndRawData.get(z)) == 1) {
            status = "Correct";
        } else {
            status = "Not Correct";
            break;
        }
    }
}

任何人有更好的想法来制作动态代码?

谢谢

【问题讨论】:

  • 可以输入如下?第一组:开始 1,结束 90 第二组:开始 80,结束 180
  • @AhmadAl-Kurdi 可能但结果不正确!因为它必须是连续的

标签: java algorithm arraylist data-structures


【解决方案1】:

这个也能胜任。

        String status = "Not Correct";
        int z = ArrStartRawData.size()-1;
        while (--z>=0 && ArrStartRawData.get(z+1) == ArrEndRawData.get(z)+1);            
        if (z < 0) status = "Correct"; 

【讨论】:

    【解决方案2】:

    这可能行得通。您还可以将它们所在的初始数组用于相同的功能。此外,如果您从 z = 1 开始,您可以删除 if 语句并仅检查错误语句...

    但是由于我不确定您从这里开始的内容是什么...正是您所拥有的,但没有那么复杂。对不起,这是我理解的唯一方法。

    status = "Correct";
    for(int z=1; z < ArrEndRawData.size() ; z++){
        if((ArrStartRawData.get(z) - ArrEndRawData.get(z-1)) != 1) {
            status = "Not Correct";
            break;
        }
    }
    

    另外,为了有趣和动态,我会添加一些内容以确保您的 End 与 Start 一样多。

    【讨论】:

      猜你喜欢
      • 2016-11-08
      • 2014-09-28
      • 1970-01-01
      • 2021-07-30
      • 2015-03-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多