Day Nine

算法题

算法题:最小栈
来源:力扣 155
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。
push(x) —— 将元素 x 推入栈中。
pop() —— 删除栈顶的元素。
top() —— 获取栈顶元素。
getMin() —— 检索栈中的最小元素。

示例:
输入:
[“MinStack”,“push”,“push”,“push”,“getMin”,“pop”,“top”,“getMin”]
[[],[-2],[0],[-3],[],[],[],[]]
输出:
[null,null,null,null,-3,null,0,-2]
解释:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.getMin(); --> 返回 -2.
提示:
pop、top 和 getMin 操作总是在 非空栈 上调用。
解题思路
通过昨天的对栈的理解,这道题唯一的难点就在于如何返回堆栈中最小值,我们需要记录堆栈每个时刻的最小值,当进栈出栈时,最小值都有可能变化,所以我们拿一个另一个栈来存储每个时刻的栈中最小值即可。

class MinStack {
public:
    /** initialize your data structure here. */
    MinStack() {

    }
    
    void push(int x) {
        mydata.push(x);
        if(mins.empty()){
            mins.push(x);
        }else{
            if(x>mins.top()){
                mins.push(mins.top());
            }else{
                mins.push(x);
            }
        }
    }
    
    void pop() {
        mydata.pop();
        mins.pop();
    }
    
    int top() {
        return mydata.top();
    }
    
    int getMin() {
        return mins.top();
    }
private:
    std::stack<int> mydata;
    std::stack<int> mins;
};

算法题:验证栈序列
来源:力扣 946
给定 pushed 和 popped 两个序列,每个序列中的 值都不重复,只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时,返回 true;否则,返回 false 。

示例 1:
输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]
输出:true
解释:我们可以按以下顺序执行:
push(1), push(2), push(3), push(4), pop() -> 4,
push(5), pop() -> 5, pop() -> 3, pop() -> 2, pop() -> 1

示例 2:
输入:pushed = [1,2,3,4,5], popped = [4,3,5,1,2]
输出:false
解释:1 不能在 2 之前弹出。

提示:
0 <= pushed.length == popped.length <= 1000
0 <= pushed[i], popped[i] < 1000
pushed 是 popped 的排列。

解题思路
验证一个出栈序列是否合法,我们先模拟入栈,依次入栈,每次入栈判断,栈的头部元素是否等于出栈序列的第一位,如果是就将其出栈,出栈序列第一位也出栈。当模拟完之后,最后栈中若存有元素,证明序列不合法。

图解
在这里插入图片描述
代码:

class Solution {
public:
    bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
        std::stack<int> test;
        vector<int>::iterator k = popped.begin();
        for(int i=0;i<pushed.size();i++){
            test.push(pushed[i]);
            while(!test.empty()&&test.top()==popped.front()){
                test.pop();
                popped.erase(k);
            }
        }
        if(test.empty()){
            return true;
        }
        return false;
    }
};

数据结构及算法书读后感

今天看了《大话数据结构》前两章,基本都是概念,我不太喜欢记这些。第一张主要内容我觉得就是逻辑结构和物理结构,逻辑结构有集合,线性,树形,和图形结构,物理结构有顺序和链式存储结构。第二章讲了算法的各种定义,嘿嘿我都没记,只知道高效率低存储,利用时间复杂度去推算自己算法花费的时间,想一下是否有办法改进。而《算法图解》看了第一章,学会了二分查找法,理解算法的作用。

前端

RGB

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>RGB</title>
    <style>
        /* 
        RGB:red green blue
        美术老师说过这三个颜色能调一切颜色
        每个颜色浓度为0-255
        十六进制00-ff
        三个颜色浓度不同就会混成不同颜色
        rgba: a为透明度 0-1 
         */
        .box1{
            width: 300px;
            height: 300px;
            background-color: rgb(255,255,255);
            background-color: #ffffff;
            background-color: rgb(0,0,0);
            background-color: #000000;
            background-color: rgb(0,0,255);
            background-color: rgb(255,0,0);
            background-color: rgb(0,255,0);
        }
        .box2{
            width: 300px;
            height: 300px;
            background-color:  rgba(0, 0, 0, 0.8);
        }
    </style>
</head>
<body>
    <div class="box1"><div class="box2"></div></div>
</body>
</html>

演示效果
在这里插入图片描述
在这里插入图片描述
HSL

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>HSL</title>
    <style>
        /* 
        HSL hue, saturation, lightness 
        (色相(0-360),饱和度(0%-100%),亮度(0%-100%))

         */
        .box1{
            width: 300px;
            height: 300px;
            background-color: hsl(180, 50%, 50%);
        }
    </style>
</head>
<body>
    <div class="box1"></div>
</body>
</html>

演示效果
在这里插入图片描述
文档流

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>normalFlow</title>
    <style>
        .box1{
            background-color: indigo;
        }
        .box2{
            background-color: red;
        }
    </style>
</head>
<body>
    <!-- 
        文档流
            -用户看到最顶层
            -最底层为文档流,网页基础,所创元素默认在文档流中
            -特点:
                1.块元素
                    -块元素会在页面独占一行
                    -默认父元素宽度
                    -默认高度看内容的多少,撑大
                2.行内元素
                    -不会占一行,只占自身大小
                    -自左向右排列
                    -默认高度和宽度与内容有关

     -->
     <div class="box1">a</div>
     <div class="box2">b</div>
    </body>
</html>

演示效果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Monster_White

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值