• 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;

    }
    }
    ```

  • 相关阅读:
    用队列打印杨辉三角
    mysql允许远程连接
    window文件恢复工具
    android 虚拟机没有sd卡
    StringUtils 的填充方法
    plsql 中出现 Dynamic Performance Tables not accessible 问题解决
    oracle数据库服务介绍
    遮罩的使用
    <pre>标签
    总结五个小技巧定位数据库性能问题
  • 原文地址:https://www.cnblogs.com/cquer-xjtuer-lys/p/11297333.html
Copyright © 2020-2023  润新知