算法题
算法题:最小栈
来源:力扣 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>
演示效果