打乱数组
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();
Code(By myself):
class Solution(object):
def __init__(self, nums):
"""
:type nums: List[int]
"""
self.origin = nums[:]
self.output = nums
def reset(self):
"""
Resets the array to its original configuration and return it.
:rtype: List[int]
"""
return self.origin
def shuffle(self):
"""
Returns a random shuffling of the array.
:rtype: List[int]
"""
n = len(self.output)
for i in range(n):
j = random.randint(i,n-1)
self.output[i], self.output[j] = self.output[j], self.output[i]
return self.output
Code(others):
class Solution(object):
def __init__(self, nums):
"""
:type nums: List[int]
"""
self.origin = nums
def reset(self):
"""
Resets the array to its original configuration and return it.
:rtype: List[int]
"""
return self.origin[:]
def shuffle(self):
"""
Returns a random shuffling of the array.
:rtype: List[int]
"""
t = self.origin[:]
random.shuffle(t)
return t
总结:
random.shuffle(t)打乱t
最小栈
Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.
- push(x) -- Push element x onto stack.
- pop() -- Removes the element on top of the stack.
- top() -- Get the top element.
- getMin() -- Retrieve the minimum element in the stack.
Example:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); --> Returns -3.
minStack.pop();
minStack.top(); --> Returns 0.
minStack.getMin(); --> Returns -2.
Code(By myself):
class MinStack(object):
def __init__(self):
"""
initialize your data structure here.
"""
self.list = []
def push(self, x):
"""
:type x: int
:rtype: void
"""
self.list.append(x)
def pop(self):
"""
:rtype: void
"""
if len(self.list) == 0:
return
else:
self.list.pop()
def top(self):
"""
:rtype: int
"""
if len(self.list) == 0:
return
else:
return self.list[-1]
def getMin(self):
"""
:rtype: int
"""
if len(self.list) == 0:
return
else:
return min(self.list)
Code(others):
class MinStack(object):
def __init__(self):
"""
initialize your data structure here.
"""
self.stack = []
def push(self, x):
"""
:type x: int
:rtype: void
"""
#stack每1次存储当前值x和当前最小值
if not self.stack:
self.stack.append((x,x))
else:
self.stack.append((x, min(x, self.stack[-1][-1])))
def pop(self):
"""
:rtype: void
"""
self.stack.pop()
def top(self):
"""
:rtype: int
"""
return self.stack[-1][0]
def getMin(self):
"""
:rtype: int
"""
return self.stack[-1][1]
总结:
以空间换时间,栈中储存着包含值和最小值的元组。