從陣列中隨機取若干個不重複的數
阿新 • • 發佈:2018-12-11
要求:從 0 ~ 100 中隨機取出十個不重複的 數
思路:
1: 利用陣列,通過Math.random()*(arr.length -1) 然後將取到的數跟陣列最後一個元素交換,將陣列長度減一
下面程式碼中設計到 判斷陣列中是不是有重複元素 我的想法如下,如有錯誤還望大佬指正
1:如果資料量不大利用 HashSet的去重效果,將陣列中的元素迴圈放入 Set之後判斷set.size 和 陣列長度是否相等
2:利用迴圈比較 第二個直接跟第三個開始比,依次類推
package I_Chap3; import java.util.HashSet; import java.util.Set; public class Random_norepeat_arithmetic { public static void main(String[] args) { int[] arr = new int[100]; for (int i=0;i<100;i++){ arr[i] = i; } int[] rel = new int[10]; int len = arr.length; double index; int int_index; for(int i=0;i<10;i++){ index = Math.random()*len; // 將 double 型別的 數字轉換成 int 並且不損失精度 int_index = (int)index; rel[i] = arr[int_index]; swap(arr,int_index,len-1); len--; } // for(int temp:rel){ // System.out.println(temp); // } boolean flag = judge2(arr); if(flag == true){ System.out.println("true"); }else{ System.out.println("false"); } } public static void swap(int[] a,int start,int end){ int temp; temp = a[start]; a[start] = a[end]; a[end] = temp; } /* 判斷 陣列中是不是存在重複的元素 1:利用 Hashset 因為 set 有去重的效果 把所有的元素放到 set 中 然後判斷set 的長度是不是跟 陣列長度相等 2:如果陣列非常大,可以用時間來換取空間,上面這種辦法則不可取 */ public static Set<Integer> set = new HashSet<Integer>(); public static boolean judge(int[] arr){ set.clear(); if(arr.length == 0){ return true; }else{ for(int a:arr){ set.add(a); } if(set.size() == arr.length){ return true; }else{ return false; } } } /* 兩兩相比需要 n^2 比過了就不再比,減少比較的次數 比如第二個直接跟第三個開始比 第三個直接開始跟第四個開始比 一直比到倒數第二個就OK */ public static boolean judge2(int[] arr){ outer: for(int i=0;i<arr.length -1;i++){ for(int j = i+1;j< arr.length ;j++){ if(arr[j] == arr[i]){ return false; } } } return true; } }