首页 > 编程语言 >每日算法--2023.2.26

每日算法--2023.2.26

时间:2023-02-26 21:33:06浏览次数:37  
标签:deque 26 return -- res 2023.2 int 队列 public

1.面试题59-II 队列的最大值

class MaxQueue {
    //该题的重点在于以o(1)的时间复杂度找到队列中最大的元素,如果只单纯维护当前队列一个最大的值,当该值出队后第二大的值找不到,所以应该维护一个递减队列
    //这里我们通过双端队列去维护这个递减队列,其逻辑如下:
    //如果我们要加入一个元素,在这个元素之前并且比这个元素小的值移除,并将该值放在双端队列最后
    //我们出队一个元素的时候,判断当前值是否与双端队列最大值相同,若相同则移除该值
    Deque<Integer> deque;
    Queue<Integer> queue;
    public MaxQueue() {
        deque = new LinkedList<>();
        queue = new LinkedList<>();
    }

    public int max_value() {
        if(deque.isEmpty()){
            return -1;
        }
        return deque.getFirst();
    }
    
    public void push_back(int value) {
        queue.offer(value);
        while(!deque.isEmpty()&&value>deque.getLast()){
            deque.removeLast();
        }
        deque.addLast(value);
    }
    
    public int pop_front() {
        if(queue.isEmpty()){
            return -1;
        }
        int res = queue.poll();
        if(res == deque.getFirst()){
            deque.removeFirst();
        }
        return res;
    }
}

2.面试题67--把字符串换成整数

class Solution {
    public int strToInt(String str) {
        int n = str.length();
        if(n == 0){
            return 0;
        }
        int i = 0;
        long res = 0;
        boolean flag = false;
        while(i<n&&str.charAt(i) == ' '){
            i++;
        }
        if(i == n){
            return 0;
        }
        if(str.charAt(i) == '-'){
            flag = true;
            i++;
        }else if(str.charAt(i) == '+'){
            i++;
        }  
        for(;i<n;i++){
            int cur = str.charAt(i) - '0';
            if(cur<0||cur>9){
                break;
            }
            else {
                res = res * 10 + cur;
            }
            if(res>Integer.MAX_VALUE){
                if(flag == false){
                    return Integer.MAX_VALUE;
                }else{
                    return Integer.MIN_VALUE;
                }
            }
        }
        if(flag == true){
            res = -res;
        }
        return (int)res;
    }
}

3.剑指offer12--矩阵中的最短路径

class Solution {
    public boolean[][] flag;
    public int[] dx = new int[]{1,0,-1,0};
    public int[] dy = new int[]{0,1,0,-1};
    public boolean exist(char[][] board, String word) {
        int m = board.length, n = board[0].length;
        flag = new boolean[m][n];
        for(int i = 0;i<m;i++){
            for(int j = 0;j<n;j++){
                if(word.charAt(0) == board[i][j]){
                    flag[i][j] = true; 
                    if(dfs(i,j,1,board,word)){
                        return true;
                    }
                    flag[i][j] = false;
              }
            }
        }
    return false;    
    }
    public boolean dfs(int i, int j, int k, char[][] board, String word){
        //System.out.println(k);
        if(k == word.length()){
            return true;
        }

        for(int p = 0;p<4;p++){
            int xx = i + dx[p], yy = j + dy[p];
            if(xx>=0&&xx<board.length&&yy>=0&&yy<board[0].length&&board[xx][yy] == word.charAt(k)&&flag[xx][yy] == false){
                flag[xx][yy] = true;
                boolean flag1 = dfs(xx,yy,k+1,board,word);
                flag[xx][yy] = false;
                if(flag1 == true){
                    return true;
                }
            }
        }
        return false;
    }
}

  

  

  

标签:deque,26,return,--,res,2023.2,int,队列,public
From: https://www.cnblogs.com/lyjps/p/17157795.html

相关文章

  • 6.15-多周期MIPS CPU数据通路(1)
    单周期MIPS关键路径LW指令时间延迟问题由于系统采用单周期实现所以整个系统的时钟周期取决于最慢那一条指令的时间延迟,以LW指令为例,涉及到指令存储器以及数据存储器的......
  • boot学习笔记
    idea运行springboot的application项目报错原因:idea默认创建的boot为3.0以上版本,而该版本默认的依赖是jdk17,自己使用的是jdk8解决:更换boot版本至2.0左右boot原理:自......
  • 2月26日Android开发学习
    1.App运行日志Android采用Log工具打印日志,他讲各类日志划分为五个等级(1)Log.e:表示错误信息,比如可能导致程序崩溃的异常。(2)Log.w:表示警告信息。(3)Log.i:表示一般......
  • #10051. 「一本通 2.3 例 3」Nikitosh 和异或
    求两段不相交子序列,他们异或和的和最大  #include<iostream>#include<algorithm>#include<cstring>usingnamespacestd;constintN=4e5+4;intch[N*32......
  • JavaScript 相等运算符
    <!DOCTYPEhtml><html> <head> <metacharset="UTF-8"> <title></title> <scripttype="text/javascript"> /* *相等运算符用来比较两个值是否相等, ......
  • Flask-下载功能
    importosimportpathlibimportmimetypesfromflaskimportFlask,Response,make_response,send_from_directorybase_path=pathlib.Path(__file__).parentapp=Fl......
  • JavaScript 条件运算符
    <!DOCTYPEhtml><html> <head> <metacharset="UTF-8"> <title></title> <scripttype="text/javascript"> /* *条件运算符也叫三元运算符 * 语法: ......
  • ACP云原生容器题目整理 -- 阿里云容器服务ACK
    ACK集群升级策略:集群默认分批升级,第一批升级节点数为1,后续以2的幂次增长,暂停后重新恢复的第一批次为1,后续也是以2的幂次增长,每一批节点的最大数量不会超过总数的10%生成......
  • JavaScript 运算符的优先级
    <!DOCTYPEhtml><html> <head> <metacharset="UTF-8"> <title></title> <scripttype="text/javascript"> /* *,运算符 * 使用,可以分割多个语......
  • JavaScript 代码块
    <!DOCTYPEhtml><html> <head> <metacharset="UTF-8"> <title></title> <scripttype="text/javascript"> /* *我们的程序是由一条一条语句构成的 ......