LeetCode初级算法——设计问题类——算法总结

LeetCode初级算法——设计问题类——算法总结

PS:算法并非原创,总结的本意在于温故知新、巩固知识。侵删。

1、打乱数组
使用Python解答,代码如下:

import random
# 打乱一个没有重复元素的数组。
#
# 示例:
# // 以数字集合 1, 2 和 3 初始化数组。
# int[] nums = {1,2,3};
# Solution solution = new Solution(nums);
#
# // 打乱数组 [1,2,3] 并返回结果。任何 [1,2,3]的排列返回的概率应该相同。
# solution.shuffle();
#
# // 重设数组到它的初始状态[1,2,3]。
# solution.reset();
#
# // 随机返回数组[1,2,3]打乱后的结果。
# solution.shuffle();
 
 
class Solution:
 
    def __init__(self, nums):
        self.nums = nums
        self.save_nums = nums
 
    def reset(self):
        """
        Resets the array to its original configuration and return it.
        """
        return self.save_nums
 
    def shuffle(self):
        """
        Returns a random shuffling of the array.
        """
        lens = len(self.nums)
        array = []
        while len(array) != lens:
            key = random.randint(0, lens-1)
            # rondom.randint: [a,b], numpy.random.randint: [a, b)
            if self.nums[key] not in array:
                array.append(self.nums[key])
        return array

算法解析:
对于函数shuffle,array用来存储最终结果,每一次生成随机数作为目前要取的下标,然后建立起原数组和新数组的连接。
__init__是初始化,设置函数中的save_nums和nums数组,
reset是恢复函数,返回save_nums,也就是保存的原始数组结果。
算法没什么难度,主要是学习了一下python中的功能函数。

点击查看参考博客
算法占用时空间资源:
LeetCode初级算法——设计问题类——算法总结_第1张图片

2、最小栈
使用C++解答,代码如下:

class MinStack {
public:
    /** initialize your data structure here. */
    //用两个栈来操作,其中一个把最小元素放到栈顶
    
    MinStack() {}
    
    void push(int x) {
       
        if(mins.empty() || x<=mins.top())
            mins.push(x);
         s.push(x);
    }
    
    void pop() {
       
        if(s.top() == mins.top())
            mins.pop();
         s.pop();
    }
    
    int top() {
        return s.top();
    }
    
    int getMin() {
        return mins.top();
    }
     
private:
    stack<int> s,mins;

};

/**
 * Your MinStack object will be instantiated and called as such:
 * MinStack obj = new MinStack();
 * obj.push(x);
 * obj.pop();
 * int param_3 = obj.top();
 * int param_4 = obj.getMin();
 */

算法解析:
题目要求设计pop、push、top、getMin等函数设计,此处使用两个栈结构,s和mins。s存储元素依次压入的栈顺序,mins存储的是最小元素位于栈顶的栈顺序。
实现mins的栈顺序,主要是通过push中的选择性压入。

点击查看参考博客
算法占用时空间资源:
LeetCode初级算法——设计问题类——算法总结_第2张图片

你可能感兴趣的:(Leetcode,算法,leetcode)