微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果连续整数形式的子列表排序了整数的非重复列表,是否有更有效的方法来找到获取列表的解决方案?

如何解决如果连续整数形式的子列表排序了整数的非重复列表,是否有更有效的方法来找到获取列表的解决方案?

我正在开发拉米纸牌游戏。我想突出显示运行卡(运行卡是:连续升序的 3 张或更多卡;差值为 1)。
例如:
我。 1,2,3 的心
ii. 4,5,6,7 钻石
iii. 7,8,9,10,11(Jack),12(Queen),13(King) 等任何套装

输入:无重复元素的有序整数列表。

n = [1,3,7,11,13,14,15,16,17,18,21,22,23,24,27,29,31,32,34,35,36,39]

输出:具有连续元素的整数列表列表。

[[1,3],[5,7],[9,11],[13,18],[21,24],[34,36]]

目前我的解决方案是在 C# 中(在 python 中也供参考)。

using System.Linq;
public static void CheckruncardNumber(List<int> num)
{
    Console.WriteLine("\nInput List: " + string.Join(",",num));
    //Last element of input list is not used in solution..Don't kNow why..
    //So I append the list to with non-consecutive integer as offset
    num.Add(num.Max() + 2);

    List<int> sub = new List<int>();            //Sub-list
    List<List<int>> lt = new List<List<int>>(); //Main list

    sub.Add(num[0]);
    for (int i = 1; i < num.Count; i++)
    {
        /// if currentNum & prevIoUsNum are not consecutive,/// Add currentConsecutiveList to main-list:lt
        /// and re-initialize list:sub
        if (num[i] - sub.Last() != 1)
        {
            if(sub.Count > 2) lt.Add(sub);
            sub = new List<int>();
        }
        sub.Add(num[i]);
    }
    for (int i = 0; i < lt.Count; i++)
    {
        Console.WriteLine($"\tSub-List_{i}[{lt[i].Count}]: " + string.Join(",lt[i]));
    }
}

public static void TestRunNumbers()
{
    CheckruncardNumber(new List<int>() { 1,8 });
    CheckruncardNumber(new List<int>() { 1,12 });
    CheckruncardNumber(new List<int>() { 1,12,13 });
    CheckruncardNumber(new List<int>() { 9,13 });
    CheckruncardNumber(new List<int>() { 11,13 });
    CheckruncardNumber(new List<int>() { 1,24 });
}

+++++++++++++
++ OUTPUTS ++
+++++++++++++
Input List: 1,8
        Sub-List_0[3]: 1,3

Input List: 1,8

Input List: 1,8
        Sub-List_0[3]: 6,12
        Sub-List_0[3]: 1,3
        Sub-List_1[3]: 10,12

Input List: 1,13
        Sub-List_0[3]: 1,3
        Sub-List_1[3]: 7,9
        Sub-List_2[3]: 11,13

Input List: 9,13
        Sub-List_0[3]: 11,13

Input List: 11,13

Input List: 1,24
        Sub-List_0[3]: 1,3
        Sub-List_1[3]: 5,7
        Sub-List_2[3]: 9,11
        Sub-List_3[6]: 13,18
        Sub-List_4[4]: 21,24

这是我的python实现以供参考:

def checkRun(num0):
    num = [i for i in num0]
    num.append(num0[-1] + 2)
    sub = []
    lt = []
    sub.append(num[0])
    n.remove(num[0])
    for i in num:
        if(i - sub[-1] != 1):
            if(len(sub) > 2): lt.append(sub)
            sub = []
        sub.append(i)
    return lt

In [1]: n = [1,39]
In [2]: checkRun(n)
Out[2]:
[[1,36]]

现在我的问题是找到比上述当前方法更有效的方法

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。