NetBeans项目

涉及数组的问题

期末考试的一个问题将会涉及到数组和循环的使用。为了帮助你们准备这次考试的问题,我将解决一个涉及数组的问题,它的难度与你们在期末考试中看到的问题相似。

这个问题是从一个可能有重复的数字列表中构造一个唯一的数字列表。对于这个问题,我们将处理一个包含1000个随机整数的文件。赢博体育的整数都在0到999之间。该列表确实包含重复项,因此我们的工作将是构造一个文件中数字的列表,并从列表中删除重复项。

三个解决方案

为了证明计算机科学中的大多数问题都有不止一个解决方案,我将为这个问题构造三个不同的解决方案。在每个解决方案中,我将构造一个方法,该方法将包含原始数字列表的数组作为其参数。然后,该方法将构造并返回一个包含唯一数字列表的数组。

第一个解决方案从对原始列表排序开始。对原始的数字列表进行排序后,查找重复项会容易得多。

public static int[] removeduplduplicate (int A[]){//排序列表,使我们的工作更容易//计算A中唯一的数字个数int Count = 1;(int n = 1; n < A.length; n + +){如果([n] ! = [n])计数+ +;} //创建结果数组,并将数字复制到其中。int B[] = new int[count];B b[0] = a b[0];Int k = 1;(int n = 1; n < A.length; n + +){如果([n] ! = [n]) {B [k] = [n];k + +;}}返回B;}

这里逻辑的关键部分是搜索新数字。当我们遇到一个与之前的数字不同的数字时,我们就知道我们在排序列表中遇到了一个新的数字。我们首先使用这个逻辑来获得a中唯一数字的计数。一旦我们知道了这个计数,我们就确切地知道结果数组需要有多大。

第二种解决方案使用了完全不同的策略。第二种解决方案首先收集a中每个可能数字出现的次数。一旦我们收集了计数信息,我们就可以很容易地计算出A中有多少个唯一的数字。

public static int[] removedps (int A[]){//收集A中每个数字出现的次数int counts[] = new int[1000];For (int n = 0;n < counts.length;n++) counts[n] = 0;for(int n = 0;n < A.length;n++) counts[A[n]]++;//现在使用这个计数信息来计数A中有多少个唯一的数字// int count = 0;For (int n = 0;n < counts.length;n++) if(counts[n] >) count++;//构造结果列表并将数字复制到其中int B[] = new int[count];Int k = 0;n = 0;n < count .length;n++) if(count [n] >) {B[k] = n;k + +;}返回B;}

第三种解决方案利用Java类库中的一个类。TreeSet类有一个有用的属性:它将拒绝重复。在这个解决方案中,我们遍历并将A中的每个数字添加到TreeSet中。因为TreeSet拒绝重复,我们最终会得到TreeSet中每个数字A的一个副本。然后我们要做的就是将TreeSet中的数字复制回数组中。

public static int[] removeDupsWithSet(int A[]) {TreeSet<Integer> set = new TreeSet<Integer>();set.add(n = 0;n < A;n++);int B[] = new int[set.size()];Int k = 0;for(int x: set) {B[k] = x;k + +;}返回B;}