LeetCode:384. Shuffle an Array

  <!-- @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/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章