Algorithm 如何使用给定的数组逐个生成最小id?

Algorithm 如何使用给定的数组逐个生成最小id?,algorithm,Algorithm,给定像['8','2','5','3']这样的数组和整数n。 编写函数生成id,id不能包含n个连续数字。所有数字必须来自给定数组 例如,如果n等于2,则当前id为8253,下一个id为8258,因为8255有两个连续的5 如何解决它?我建议使用N基整数系统。所以对于上面的例子,我们可以使用5基系统 首先对数字数组进行排序,即['2','3','5','8',],每个数字将匹配从1开始的新基数。例如,'2'->1,'3'->2,'5'->3,'8'->4 我从1分配的不是0,因为如果从0开始,“

给定像['8','2','5','3']这样的数组和整数n。 编写函数生成id,id不能包含n个连续数字。所有数字必须来自给定数组

例如,如果n等于2,则当前id为8253,下一个id为8258,因为8255有两个连续的5


如何解决它?

我建议使用N基整数系统。所以对于上面的例子,我们可以使用5基系统

  • 首先对数字数组进行排序,即['2','3','5','8',],每个数字将匹配从1开始的新基数。例如,'2'->1,'3'->2,'5'->3,'8'->4 我从1分配的不是0,因为如果从0开始,“235”和“2235”将是相同的“012”和“0012”

  • 对于数字“8253”,我们可以更改为基数“4132”

  • 我们从“4132”(5基整数系统)中逐个相加,检查它是否包含0个或连续n个相同的数字

  • 希望这能有所帮助,尽管有点复杂。

    我建议使用N基整数系统。所以对于上面的例子,我们可以使用5基系统

  • 首先对数字数组进行排序,即['2','3','5','8',],每个数字将匹配从1开始的新基数。例如,'2'->1,'3'->2,'5'->3,'8'->4 我从1分配的不是0,因为如果从0开始,“235”和“2235”将是相同的“012”和“0012”

  • 对于数字“8253”,我们可以更改为基数“4132”

  • 我们从“4132”(5基整数系统)中逐个相加,检查它是否包含0个或连续n个相同的数字

  • 希望这能有所帮助,尽管有点复杂。

    如果
    n=2
    的当前id是
    8253
    ,那么为什么
    下一个id
    8258
    而不是
    8254
    ?因为id的数字来自给定数组。给定的数组是[8,2,5,3],不包含4使用
    next\u置换
    并检查它是否包含n个连续数字@拉杰,非常感谢。这对我很有帮助。但在我的例子中,数组中的元素是允许重复的,id的长度是无限的。因此,可能是832582532,“下一个置换”无法解决此问题。您可以实现
    rank
    (获取给定置换的索引)和
    unrank
    (从给定索引创建置换)方法;如果
    n=2
    当前id
    8253
    ,那么为什么
    下一个id
    8258
    而不是
    8254
    ?因为id的数字来自给定数组。给定的数组是[8,2,5,3],不包含4使用
    next\u置换
    并检查它是否包含n个连续数字@拉杰,非常感谢。这对我很有帮助。但在我的例子中,数组中的元素是允许重复的,id的长度是无限的。因此,可能是832582532,“下一个置换”无法解决此问题。您可以实现
    rank
    (获取给定置换的索引)和
    unrank
    (从给定索引创建置换)方法;