【问题标题】:How would you make an array of 10000 with only values of 1-1000 inclusive?你将如何制作一个只有 1-1000 的值的 10000 数组?
【发布时间】:2014-05-12 21:26:51
【问题描述】:

“每个函数都应使用数组输入运行,大小为 100、1000 和 10000;其中每个
任何数组中的值都应该是从 1 到 1000 的整数。每个排序函数应该是
在以下类型的数组上运行:随机数、排序列表和几乎排序列表"

下面我创建了三个数组。

第一个用 1-1000 的整数随机填充 10000 的数组。

第二次用 1-10000 的整数填充 10000 的数组。 第三次随机播放 10000 数组,其中包括 1-10000 的整数。

我的问题是我无法让我的第二个和第三个 10000 数组只包含 1-1000 的值。 甚至可能吗?我是新手。任何帮助将不胜感激!!

int [] inputTenThousand = new int[10000];               // Random 10000
    for (int a = 0; a < inputTenThousand.length; a++) {
       inputTenThousand [a] = (int) (Math.random () * 1000);
    }



int [] inputTenThousand2 = new int[10000]               // Sorted 10000
    for (int a = 0; a < inputTenThousand2.length; a++) {
       inputTenThousand2[a] = a + 1;
    }




List<Integer> TenThousandList = new ArrayList<Integer>();
    for (int i = 1; i < 10001; i++) {
        TenThousandList.add(i);
    }
     Collections.shuffle(TenThousandList);
int[] inputTenThousand3 = new int[TenThousandList.size()];  // Almost Sorted 10000
    for (int i = 0; i < TenThousandList.size(); i++) {
       inputTenThousand3[i] = TenThousandList.get(i);
    }
    for (int i = 0; i < inputTenThousand3.length; i++) {            
       inputTenThousand3[i] = TenThousandList.get(i);   
    }

【问题讨论】:

  • @RC。再次阅读问题:数组大小为 10k,但元素从 1 变为 1k。
  • @LuiggiMendoza 对角线阅读让我明白了,谢谢
  • stackoverflow.com/questions/3038392/… 这可能会有所帮助
  • @vishram0709 ...但可能不是。除非幕后发生了非常意想不到的事情,否则这里不存在数组大小问题。

标签: java arrays arraylist


【解决方案1】:

只需为第二个和第三个列表添加modulo operator,您就可以使用已有的代码非常接近。添加元素“mod 1000”可确保列表中没有大于 1000 的值。(您必须将结果值加一以将范围从 0-999 上移至 1-1000)。

inputTenThousand2[a] = (a % 1000) + 1;

当然,这不会保留您最初创建的排序顺序,但是一旦您生成了这些数组,您就会注意到一个非常清晰的模式。您的数组现在只是数字 1-1000,重复十次。这使得描绘排序后的数组看起来很容易:

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
 ...
 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000] 

所以,我们可以首先构造那个漂亮的排序列表:

int [] inputTenThousand2 = new int[10000];     // 10000 sorted integers
for (int v = 0; v < 1000; v++) { // loop from 0 to 999
    for (int i = 0; i < 10; i++) { 
        inputTenThousand2[(10*v) + i] = v + 1; // Set ten elements per value of the outer loop
    }
}

然后您可以将此列表复制到第三个列表中,并为您的第三个案例“稍微取消排序”!


当然,根据您可以访问的内容(这看起来像是一项作业,因此您可能没有现成的排序),创建第一个列表可能会更容易,因为您已经拥有它,然后复制它并为第二种情况排序。

【讨论】:

  • 但是我在描述中添加的引用(这是我项目的一部分)并不是说数组大小为 10000,而是 1-1000 个整数。我认为数组应该有 10000 个整数,但只有 1-1000 意味着会有重复。我读错了吗?
  • @user3478869 是的,11000 之间包含 10,000 个整数的数组必然有重复项。 平均而言,每个整数将以均匀随机分布重复十次。我的建议是通过创建一个由十个 1、十个 2、十个 3... 一直到十个 1000 的排序数组来正式化这一事实。
  • 谢谢先生。那是我的另一个问题,实际上我不知道你怎么会有一个“稍微未排序”的数组?这就是为什么我只使用随机播放。我知道这不会创建稍微未排序的数组,但不知道还能做什么。
  • @user3478869 很高兴我能帮上忙!至于什么构成“几乎排序”的数组,您必须要求澄清从您获得此任务的任何地方这意味着什么。也许你可以复制排序后的数组并交换任意两个不相等的元素,这就足够了——无论如何,这在我的书中算作“几乎排序”了!
猜你喜欢
  • 2020-02-09
  • 2016-09-21
  • 1970-01-01
  • 2011-09-25
  • 2013-12-31
  • 2011-01-26
  • 1970-01-01
  • 2012-12-07
  • 1970-01-01
相关资源
最近更新 更多