LeetCode:384. Shuffle an Array

来源:互联网 发布:c 调用程序的编程 编辑:程序博客网 时间:2024/06/06 14:26
Discuss Pick One

  <!-- @END Action Button-->  <div class="question-description">    <p></p><p>Shuffle a set of numbers without duplicates.

Example:

// Init an array with set 1, 2, and 3.int[] nums = {1,2,3};Solution solution = new Solution(nums);// Shuffle the array [1,2,3] and return its result. Any permutation of [1,2,3] must equally likely to be returned.solution.shuffle();// Resets the array back to its original configuration [1,2,3].solution.reset();// Returns the random shuffling of array [1,2,3].solution.shuffle();

  </div>  <!-- Interview Feedback -->  <div id="interviewed-div">    <hr class="line dotted interview-hr">    <div class="close-survey btn btn-xs pull-right" onclick="document.getElementById(&quot;interviewed-div&quot;).style.display = &quot;none&quot;;">      <i class="fa fa-times-circle" aria-hidden="true"></i>    </div>    <form id="interviewed-form" method="post" action="/problems/api/interviewed/">      <input type="hidden" name="csrfmiddlewaretoken" value="mLjSMKnuwWqj0QTix6UG5P5aSsNacTx8wZ0fWWwiZrNIMj2PFe6hFCRpkmBZrMpR">      <input type="hidden" name="question_id" value="384">      <input type="hidden" name="feedback" value="Thanks for your feedback.">      <input type="hidden" name="option">      <input type="hidden" name="is_interviewed" value="false">      <input type="hidden" name="time_option">      <input type="hidden" name="company_id" value="0">      <input type="hidden" name="interviewedstats_id" value="0">    </form>    <div id="survey">      <div id="general_questions">        <span>Seen this question in a real interview before? &nbsp;</span>        <span class="text-warning chosen_option text-bold"></span>        <span id="yes-or-no-options">          <div value="true" name="is_interviewed" id="yes" follow_up="#yes_questions" class="submit btn btn-default btn-xs">            Yes          </div>          <div value="false" name="is_interviewed" id="no" class="submit btn btn-default btn-xs">            No          </div>        </span>      </div>      <div id="yes_questions" class="hide">        <span>When did you encounter this question? &nbsp;</span>        <span class="text-warning chosen_option text-bold"></span>        <span>            <div value="0" follow_up="#company_questions" name="time_option" class="submit btn btn-default btn-xs">              last week            </div>            <div value="1" follow_up="#company_questions" name="time_option" class="submit btn btn-default btn-xs">              last month            </div>            <div value="2" follow_up="#company_questions" name="time_option" class="submit btn btn-default btn-xs">              last 3 month            </div>            <div value="3" follow_up="#company_questions" name="time_option" class="submit btn btn-default btn-xs">              last 6 month            </div>            <div value="4" follow_up="#company_questions" name="time_option" class="submit btn btn-default btn-xs">              more than 6 months            </div>            <div value="5" follow_up="#company_questions" name="time_option" class="submit btn btn-default btn-xs">              other            </div>        </span>      </div>      <div id="company_questions" class="hide">        <span>Which company? &nbsp;</span>        <span class="text-warning chosen_option text-bold"></span>        <span id="company_list">            <div value="54" name="company_id" class="submit btn btn-default btn-xs">              Adobe            </div>            <div value="69" name="company_id" class="submit btn btn-default btn-xs">              Aetion            </div>            <div value="49" name="company_id" class="submit btn btn-default btn-xs">              Airbnb            </div>            <div value="59" name="company_id" class="submit btn btn-default btn-xs">              Alibaba            </div>            <div value="42" name="company_id" class="submit btn btn-default btn-xs">              Amazon            </div>            <div value="47" name="company_id" class="submit btn btn-default btn-xs">              Apple            </div>            <div value="55" name="company_id" class="submit btn btn-default btn-xs">              Baidu            </div>            <div value="43" name="company_id" class="submit btn btn-default btn-xs">              Bloomberg            </div>            <div value="70" name="company_id" class="submit btn btn-default btn-xs">              Cloudera            </div>            <div value="71" name="company_id" class="submit btn btn-default btn-xs">              Coursera            </div>            <div value="92" name="company_id" class="submit btn btn-default btn-xs">              Cryptic Studios            </div>            <div value="56" name="company_id" class="submit btn btn-default btn-xs">              Dropbox            </div>            <div value="63" name="company_id" class="submit btn btn-default btn-xs">              eBay            </div>            <div value="72" name="company_id" class="submit btn btn-default btn-xs">              Epic Systems            </div>            <div value="73" name="company_id" class="submit btn btn-default btn-xs">              Expedia            </div>            <div value="40" name="company_id" class="submit btn btn-default btn-xs">              Facebook            </div>            <div value="74" name="company_id" class="submit btn btn-default btn-xs">              Fallible            </div>            <div value="93" name="company_id" class="submit btn btn-default btn-xs">              Games            </div>            <div value="75" name="company_id" class="submit btn btn-default btn-xs">              Gilt Groupe            </div>            <div value="76" name="company_id" class="submit btn btn-default btn-xs">              GoDaddy            </div>            <div value="94" name="company_id" class="submit btn btn-default btn-xs">              Goo            </div>            <div value="39" name="company_id" class="submit btn btn-default btn-xs">              Google            </div>            <div value="95" name="company_id" class="submit btn btn-default btn-xs">              Hedvig            </div>            <div value="77" name="company_id" class="submit btn btn-default btn-xs">              Houzz            </div>            <div value="64" name="company_id" class="submit btn btn-default btn-xs">              Hulu            </div>            <div value="65" name="company_id" class="submit btn btn-default btn-xs">              Indeed            </div>            <div value="78" name="company_id" class="submit btn btn-default btn-xs">              Intuit            </div>            <div value="60" name="company_id" class="submit btn btn-default btn-xs">              IXL            </div>            <div value="45" name="company_id" class="submit btn btn-default btn-xs">              LinkedIn            </div>            <div value="61" name="company_id" class="submit btn btn-default btn-xs">              LiveRamp            </div>            <div value="79" name="company_id" class="submit btn btn-default btn-xs">              Lyft            </div>            <div value="80" name="company_id" class="submit btn btn-default btn-xs">              MAQ Software            </div>            <div value="66" name="company_id" class="submit btn btn-default btn-xs">              Mathworks            </div>            <div value="41" name="company_id" class="submit btn btn-default btn-xs">              Microsoft            </div>            <div value="81" name="company_id" class="submit btn btn-default btn-xs">              NetEase            </div>            <div value="82" name="company_id" class="submit btn btn-default btn-xs">              Netsuite            </div>            <div value="57" name="company_id" class="submit btn btn-default btn-xs">              Palantir            </div>            <div value="96" name="company_id" class="submit btn btn-default btn-xs">              Palantir Technologies            </div>            <div value="67" name="company_id" class="submit btn btn-default btn-xs">              Pinterest            </div>            <div value="53" name="company_id" class="submit btn btn-default btn-xs">              Pocket Gems            </div>            <div value="83" name="company_id" class="submit btn btn-default btn-xs">              Poynt            </div>            <div value="97" name="company_id" class="submit btn btn-default btn-xs">              Pure            </div>            <div value="84" name="company_id" class="submit btn btn-default btn-xs">              Pure Storage            </div>            <div value="85" name="company_id" class="submit btn btn-default btn-xs">              Rackspace            </div>            <div value="98" name="company_id" class="submit btn btn-default btn-xs">              Riot            </div>            <div value="86" name="company_id" class="submit btn btn-default btn-xs">              Riot Games            </div>            <div value="87" name="company_id" class="submit btn btn-default btn-xs">              Samsung            </div>            <div value="48" name="company_id" class="submit btn btn-default btn-xs">              Snapchat            </div>            <div value="88" name="company_id" class="submit btn btn-default btn-xs">              Square            </div>            <div value="99" name="company_id" class="submit btn btn-default btn-xs">              Storage            </div>            <div value="68" name="company_id" class="submit btn btn-default btn-xs">              Tencent            </div>            <div value="100" name="company_id" class="submit btn btn-default btn-xs">              TinyCo            </div>            <div value="46" name="company_id" class="submit btn btn-default btn-xs">              Twitter            </div>            <div value="58" name="company_id" class="submit btn btn-default btn-xs">              Two Sigma            </div>            <div value="44" name="company_id" class="submit btn btn-default btn-xs">              Uber            </div>            <div value="89" name="company_id" class="submit btn btn-default btn-xs">              Valve            </div>            <div value="90" name="company_id" class="submit btn btn-default btn-xs">              WAP            </div>            <div value="62" name="company_id" class="submit btn btn-default btn-xs">              Works Applications            </div>            <div value="52" name="company_id" class="submit btn btn-default btn-xs">              Yahoo            </div>            <div value="101" name="company_id" class="submit btn btn-default btn-xs">              Yahoo!            </div>            <div value="51" name="company_id" class="submit btn btn-default btn-xs">              Yelp            </div>            <div value="91" name="company_id" class="submit btn btn-default btn-xs">              Zappos            </div>            <div value="50" name="company_id" class="submit btn btn-default btn-xs">              Zenefits            </div>          <a><span id="show_add_company" class="fa fa-plus text-warning" title="Add a new company"></span></a>          <span id="add_company_panel">            <input id="new_company" type="text" class="ui-autocomplete-input" autocomplete="off">            <button id="add_company" class="btn btn-success btn-xs">Add Company</button>          </span>        </span>      </div>    </div>    <div id="interviewed-state">    </div>  </div>  <!-- @END Interview Feedback --></div>

题意:洗牌或者复原。
分析:洗牌的过程就是等概率的返回全排列中的某一个排列,而全排列是通过相互交换位置得到的,因此,洗牌也可以通过相互交换位置得到。如何确定等概率,即两两交换的概率相同,因此有:
for(int i=0;i

class Solution {    int[]base;    public Solution(int[] nums) {        base=nums;    }    /** Resets the array to its original configuration and return it. */    public int[] reset() {        return base;    }    /** Returns a random shuffling of the array. */    public int[] shuffle() {        int[]nums=base.clone();        Random rand=new Random();        for(int i=0;i<nums.length;i++){            swap(nums,rand.nextInt(i+1),i);        }        return nums;    }    public void swap(int[]nums,int a,int b){        int temp=nums[a];        nums[a]=nums[b];        nums[b]=temp;    }}

参考链接:http://bookshadow.com/weblog/2016/08/12/leetcode-shuffle-array/

原创粉丝点击