我想用丢失的整数替换大小为n的arraylist中的重复整数。例如:
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<Integer> myNumbers = new ArrayList<Integer>();
myNumbers.add(1);
myNumbers.add(2);
myNumbers.add(1);
myNumbers.add(3);
myNumbers.add(1);
}
}
arraylist有5个元素,因此它应该包含数字1、2、3、4、5(不是按特定顺序)(如果大小为99,则应该有1到99之间的数字(没有重复)。
它应该从[1,2,1,3,1]到[1,2,4,3,5]或[1,2,5,3,4]。它必须适用于任何大小,并且可以有多个副本。
目前,我只能用一个集合来消除重复项,但我不知道如何用缺少的元素来替换它们。
4条答案
按热度按时间jv4diomz1#
这是我对问题/问题陈述的理解:
您的输入是一个可能重复的数字1-n的列表,其中n永远不会大于列表的大小。
迭代列表时,数字的第一个示例(非重复)应保留在其当前索引处。
迭代列表时发现的数字的每个后续副本都应替换为“缺失集”中的一个数字。
“缺失集”包含所有数字1-n,其中n是删除现有集(从输入列表中)后列表的大小。
最终结果列表应包含所有数字1-
listSize
没有重复项,任何数字的第一个示例(从列表开始迭代)与输入列表位于同一索引处。如果上面的语句听起来正确,下面是一种方法(尽管可能有一种更优化的方法):
带有上面传入参数的一些示例输出:
前列表:[3、2、3、3、1、1、1]后列表:[3、2、4、5、1、6、7]
前面的列表:[2,3,2,2,3,2,1]后面的列表:[2,3,4,5,6,7,1]
ecbunoof2#
如果要获取不按特定顺序排列的数字序列,可以创建该序列并替换旧序列:
up9lanfz3#
首先找出缺少的值
遍历列表并检查当前值是否重复。如果为true,则替换为缺少的值之一
假设您使用的是java 8或更高版本,下面的内容可能是一个起点:
huwehgph4#
您可以初始化
List
相同大小的所有元素都将设置为0
然后更换0
此列表的以下内容:对于重复元素,设置
++max
哪里int max = Collections.max(myNumbers)
.对于不重复的数字,设置原始数字。
演示:
输出: