zoukankan      html  css  js  c++  java
  • 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;

    }
    }
    ```

  • 相关阅读:
    简单理解桶排序
    实现js的类似alert效果的函数
    简单理解插入排序
    一个js简单的日历显示效果的函数
    详解一个自己原创的正则匹配IP的表达式
    一个简单的js实现倒计时函数
    简单理解冒泡排序
    简单理解js的this
    vue项目分享html页面(服务器只能内网访问)
    vue项目移动端查看、分享pdf(服务器只能内网访问)
  • 原文地址:https://www.cnblogs.com/cquer-xjtuer-lys/p/11297333.html
Copyright © 2011-2022 走看看