我有一个包含项目名称的数组。我想为用户提供创建项目的选项,而无需指定其名称,因此我的程序必须提供唯一的默认名称,例如“ Item 1”。
挑战在于名称必须唯一,因此我必须检查所有数组以获取该默认名称,如果有一个具有相同名称的项目,我必须将名称更改为“ Item 2”,依此类推,直到我查找可用的名称。
显而易见的解决方案将是这样的:
String name = "Item "; for (int i = 0; !isAvailable(name + i) ; i++);
我对该算法的问题是它运行在O(N ^ 2)。
我想知道是否存在已知(或新的)更有效的算法来解决这种情况。
换句话说,我的问题是:是否有任何算法可以找到第一个大于零的数字,该数字在给定数组中不存在,并且以小于N ^ 2的速度运行?
您当然可以在O(N)时间内完成操作,N是数组中的项目数:
额外的内存需求是N + 1位,这肯定会击败实际上存储所有N个名称的任何数据结构。