<!-- @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("interviewed-div").style.display = "none";">
<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? </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? </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? </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/