数组中的值不重复,从数组随机返回一个值,要求不能重复,时间复杂度为O(1),谁能给出算法

解决方案 »

  1.   

    谁能给出代码,java,c,python都可以
      

  2.   

    String[] values = {"a","b","c","d","e","f","g","h","j","k","l","m","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};
    Random rand = new Random();
    List<Integer> indexs = new ArrayList<Integer>();
    for(int i = 0; i < values.length; i++){
    int index = rand.nextInt(values.length);
    while(indexs.contains(index)){
    index = rand.nextInt(values.length);
    }
    indexs.add(index);
    System.out.println("第 "+(index + 1) + "值=" + values[index]);
    }
    这个能实现你的功能,数组长度和内容可以不限
      

  3.   

    不考虑nextInt的时间复杂度的话,是O(1)public class Test { public static int[] array = new int[]{1,2,3,4,5,6};
    public static int borderRight = array.length;

    public static int getNextArray() {
    int random = new java.util.Random().nextInt(borderRight--);
    int rtn = array[random];
    array[random] = array[borderRight];
    return rtn;
    }

    public static void main(String[] args) {

    for(int i = 0; i < array.length; i ++) {
    System.out.println(Test.getNextArray());
    }
    }
    }
      

  4.   

    int[] nums = {1,2,3,4,5};
    int length = nums.length;//取出一个数字后,将最后一个数字填充到空位置,数组长度减一
    Random rand = new Random();
    for(int i=0;i<nums.length;i++) {
    int index = rand.nextInt(length--);//长度减一
    System.out.println(nums[index]);//打印取出的数字
    nums[index]=nums[length];//将最后一位数字填充到空位置
    }