每日一题 【每日一题】打乱一个没有重复元素的数组 -Python-20210912

Jack · 2021年09月12日 · 最后由 lework 回复于 2021年12月31日 · 42 次阅读
本帖已被设为精华帖!

通过 Fisher-Yates 算法,打乱一个没有重复元素的数组

Jack 将本帖设为了精华贴 09月12日 19:41

参考代码:

import math
import random
def shuffle(list):
    counter = len(list)
    # while there are elements in the list
    while counter > 0:
        # pick a random index
        index = math.floor(random.random()*counter)
        # Decrease counter by 1
        counter = counter -1
        # And swap the last element with it
        temp = list[counter]
        list[counter] = list[index]
        list[index] = temp
    return list
package main

import (
    "errors"
    "fmt"
    "math/rand"
)

func solve(sli []int64) ([]int64, error) {
    sliLen := len(sli)
    if sliLen <= 1 {
        return []int64{}, errors.New("参数有误")
    }
    for i:= sliLen-1; i>0; i-- {
        randNum := rand.Intn(i)  // 获取随机数
        sli[i], sli[randNum] = sli[randNum],sli[i]  // 互相赋值 
    }

    return sli, nil
}

func main() {
    /*
    随机打乱一个数组
    Fisher-Yates算法
    */

    sli := []int64{1,2,3,4,5,6,7,8}
    if newSli,err := solve(sli); err != nil {
        fmt.Println(err)
    } else {
        fmt.Println(newSli)
    }
}
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册