LeetCode刷题1

Posted cquer-xjtuer-lys

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode刷题1相关的知识,希望对你有一定的参考价值。

今天完成的是最小栈和有效括号的题
最小栈要求是完成一个支持push top pop操作的,并能在常数时间内完成检索最小元素的栈。
支持push top pop操作的栈并不难,但是常数级的查找是很困难的。通常的查找都是需要先排序,冒泡、插入和选择排序时间复杂度都是n2,快排的平均时间复杂度是logn。如果我们靠排序然后来选择最小是非常困难的。
因此在这种情况下,可以考虑空间换时间。增加一个额外的栈,保存最小元素的值。具体的代码如下:

```

import java.util.Stack;

public class MinStack
private Stack<Integer> data;
private Stack<Integer> mindata;
public MinStack()
data=new Stack<Integer>();
mindata=new Stack<Integer>();

public void push(int x)
data.push(x);
if (mindata.empty() || mindata.peek()>=x)
mindata.push(x);


public void pop()
if (mindata.peek()==data.peek())
mindata.pop();

data.pop();

public int top()
return data.peek();

public int getMin()
return mindata.peek();


```
有效括号就是给定一个字符串是由六个字符组合而成的。([])如果是左右括号能对的上就返回true,否则返回false。代码如下:

```
import java.util.HashMap;
import java.util.Map;
import java.util.Stack;

class Solution
public boolean isValid(String s)
boolean flag=false;
Stack<Character> stack=new Stack<>();
Map<Character,Character> map=new HashMap<>();
map.put(‘[‘,‘]‘);
map.put(‘(‘,‘)‘);
map.put(‘‘,‘‘);
if (s.length()%2!=0)
return flag;

for (int i = 0; i <s.length() ; i++)
Character c=s.charAt(i);
if (stack.empty() || map.get(stack.peek())!=c)
stack.push(c);
else if (map.get(stack.peek())==c)
stack.pop();


if (stack.empty())
flag=true;
else
flag=false;

return flag;



```

以上是关于LeetCode刷题1的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode刷题笔记-动态规划

leetcode刷题三十六

leetcode刷题MySQL题解十二

leetcode刷题四

leetcode刷题二十五

leetcode刷题MySQL题解十三