如何解决如果连续整数形式的子列表排序了整数的非重复列表,是否有更有效的方法来找到获取列表的解决方案?
我正在开发拉米纸牌游戏。我想突出显示运行卡(运行卡是:连续升序的 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 举报,一经查实,本站将立刻删除。