LeetBook-初级算法-设计问题

打乱数组

题意:

实现 Solution class:

  • Solution(int[] nums) 使用整数数组 nums 初始化对象
  • int[] reset() 重设数组到它的初始状态并返回
  • int[] shuffle() 返回数组随机打乱后的结果
解:

写了个随机数函数,FY洗牌算法

初始Mod是size不是size-1,在这里WA了

代码:
#include
using namespace std;
class Solution
{
    public:
    Solution(vector& nums):nums(nums) { srand(time(NULL)); }
    //构造 
    vector reset() { return nums; }
    //返回原数组-拷贝 
    vector shuffle()
    {
        using std::swap;
        vectortemp(nums);//拷贝构造
        int lg=temp.size(),Mod=lg;//不能使用Mod=lg-1(WA) 
        for(int i=0;i nums;
    //数组 
    int random(int Mod=INT_MAX)
    {
        using std::rand;
        int ans=0;
        for(int i=30;i>=0;i--) ans|=((std::rand()%2)<a;
    Solution A(a);
}

最小栈

题意:

实现 MinStack 类:

  • MinStack() 初始化堆栈对象。
  • void push(int val) 将元素val推入堆栈。
  • void pop() 删除堆栈顶部的元素。
  • int top() 获取堆栈顶部的元素。
  • int getMin() 获取堆栈中的最小元素。
解:

基本就是用可以方便头操作的容器(deque、list、forward_list、stack)这种,然后用两个容器或者pair、自定义结构体存储当前值和当前最小值

评论区看到一个存储差值的写法,蛮有意思的

在入栈时存储差值,维护最小值

出栈时如果出栈差值为负表示最小值被抛出,恢复最小值

获取栈顶时如果栈顶差值为负说明压入差值以后更新了最小值,直接输出最小值

要点就在于:先存差值再更新最小值,所以遇到负的差值就知道是更新最小值的位置,同时还可以靠这个负的差值还原原来那个较大的最小值

代码:
#include
using namespace std;
class MinStack
{
    public:
    MinStack() {}
    //默认构造函数 
    void push(int val)
    {
        if(st.empty())
        {
            st.push(0);
            Min=val;
        }
        else//非空 
        {
            st.push(val-Min);
            Min=min(Min,(long long)val);
        }
    }
    //压栈函数 
    void pop()
    {
        if(st.empty()) return ;
        
        if(st.top()>0) st.pop();
        else
        {
            Min-=st.top();
            st.pop();
        }
    }
    
    int top()//获取栈顶值 
    {
        if(st.empty()) return -1;
        
        if(st.top()>0) return Min+st.top();
        else return Min;
    }
    
    int getMin()//获取最小值 
    {
        if(st.empty()) return -1;
        
        return Min;
    } 
    private:
    long long Min;
    //最小值 
    stackst;
    //标准栈 
};
int main()
{
    
}

你可能感兴趣的:(力扣每日一题,算法,leetcode,c++,数据结构)