代码随想录算法训练营 day11

中国城市统计年鉴1991-2024面板数据真正无缺失值填补指标说明 大学普通高等中等职业教育成人中小学学前教育在校学生人数。大学普通高等中等职业教育成人中小学学前教育在校学生人数。大学普通高等中等职业教育成人中小学学前教育在校学生人数。大学普通高等中等职业教育成人中小学学前教育在校学生人数。大学普通高等中等职业教育成人中小学学前教育在校学生人数。大学普通高等中等职业教育成人中小学学前教育在校学生人数。大学普通高等中等职业教育成人中小学学前教育在校学生人数。大学普通高等中等职业教育成人中小学学前教育在校学生人数。大学普通高等中等职业教育成人中小学学前教育在校学生人数。 阅读详情

目录

用栈实现队列

正解:

用队列实现栈

正解:

有效的括号

正解:

删除字符串中的所有相邻重复项

正解:

逆波兰表达式求值

正解:


用栈实现队列

正解:

class MyQueue {
//假设所有操作都是有效的 (例如,一个空的队列不会调用 pop 或者 peek 操作)
    Stack<Integer> stackIn,stackOut;
    public MyQueue() {
        stackIn=new Stack<>();
        stackOut=new Stack<>();
    }
    
    public void push(int x) {
//将元素 x 推到队列的末尾
     stackIn.push(x);
    }
    //这里抽象一个函数,其功能是把stackIn 的元素出栈到 stackOut
    public void dumpStackIn(){
        if(!stackOut.isEmpty()) return;//如果stackOut栈有元素,就不管,反之出栈[while循环实现]
        while(!stackIn.isEmpty()){
           stackOut.push(stackIn.pop());
        }
    }
    public int pop() {
// 删除并返回队头元素 
       dumpStackIn();
       return stackOut.pop();
    }
    
    public int peek() {
//  查看队头元素不是删除
       dumpStackIn();
       return stackOut.peek();
    }
    
    public boolean empty() {
//  如果队列为空,返回 true ;否则,返回 false
      //这里就是判断两个栈是否为空
      return stackOut.isEmpty() && stackIn.isEmpty();
    }
}
​

用队列实现栈

正解:

class MyStack {
​
    Queue<Integer> que1;
    Queue<Integer> que2;
    public MyStack() {
        que1 = new LinkedList<>();
        que2 = new LinkedList<>();
    }
    
    public void push(int x) {
       que2.offer(x);
       while(!que1.isEmpty())//que1不为空
       {
           //把que1的元素转移到que2后面
           que2.offer(que1.poll());
       }
       //然后交换两个队列的值,这样弹出和删除操作就直接使用que1就可以了
       Queue<Integer> temp;
       temp=que1;
       que1=que2;
       que2=temp;
    }
    
    public int pop() {
         return que1.poll();
    }
    
    public int top() {
         return que1.peek();
    }
    
    public boolean empty() {
         return que1.isEmpty();
    }
}
​
/**
 * Your MyStack object will be instantiated and called as such:
 * MyStack obj = new MyStack();
 * obj.push(x);
 * int param_2 = obj.pop();
 * int param_3 = obj.top();
 * boolean param_4 = obj.empty();
 */

有效的括号

正解:

括号不匹配只有三种情况:左侧多/少--数量正确,类型不符--右侧多/少

class Solution {
    public boolean isValid(String s) {
        Deque<Character> deque=new LinkedList<>();
        char ch;
        for(int i=0;i<s.length();i++){
            ch=s.charAt(i);
            //取出每一个符号,判断是不是规定的符号,是, 则在栈中存储与之对应的右括号,
            if(ch=='('){
              deque.push(')');
            }else if(ch=='{'){
              deque.push('}');
            }else if(ch=='['){ 
              deque.push(']');
            }else if(deque.isEmpty()|| deque.peek()!=ch){
                //栈空了[右边括号多了],或者不满足匹配,结束循环
                return false;
            }else{
                deque.pop();//满足匹配,就出栈
            }
        }
        //判断栈是否为空,满足则true
        return deque.isEmpty();
    }
}

删除字符串中的所有相邻重复项

正解:

class Solution {
    public String removeDuplicates(String s) {
        //创建栈
        ArrayDeque<Character> ad=new ArrayDeque<>();
        char ch;
        for(int i=0;i<s.length();i++){
            ch=s.charAt(i);
            if(ad.isEmpty()||ad.peek()!=ch){
                ad.push(ch);
            }else{
                ad.pop();
            }
        }
        String res="";
        //这里做翻转操作
        while(!ad.isEmpty()){
            res=ad.pop()+res;
        }
        return res;
    }
}

逆波兰表达式求值

正解:

class Solution {
    public int evalRPN(String[] tokens) {
        Deque<Integer> stack=new LinkedList<>();
      for(String s:tokens){
           if("+".equals(s)){
               stack.push(stack.pop()+stack.pop());
           }else if("-".equals(s)){
               stack.push(-stack.pop()+stack.pop());//之所以是这么写,是因为要满足出栈后的计算表达式也和原来的数组里面的顺序一致,不然结果就不一样了
           }else if("*".equals(s)){
               stack.push(stack.pop()*stack.pop());
           }else if("/".equals(s)){
               int n1=stack.pop(),n2=stack.pop();
               stack.push(n2/n1);//之所以是这么写,是因为要满足出栈后的计算表达式也和原来的数组里面的顺序一致,不然结果就不一样了
           }else{
               stack.push(Integer.valueOf(s));
           }
​
          }
​
          return stack.pop();
      }
    }
​
解决UNITE数据库注释高unassigned率:手把手教你训练专属真菌分类器(含预训练模型分享) 本文针对使用UNITE数据库进行真菌ITS序列注释时出现的高未分配率问题,提供了详细的实战解决方案。通过对比vsearch直接注释与Naive Bayes分类器的原理差异,文章手把手指导读者在QIIME 2环境中训练专属分类器,包括数据准备、模型训练、参数优化及效果验证,并分享了预训练模型,旨在显著提升真菌群落分析的注释准确性和数据利用率。 阅读详情

相关推荐

Python爬虫实战:使用最新技术爬取新华网新闻数据

在当今信息爆炸的时代,网络爬虫技术已经成为获取互联网数据的重要手段。作为国内权威新闻媒体,新华网每天发布大量高质量的新闻内容,这些数据对于舆情分析、市场研究、自然语言处理等领域具有重要价值。本文将详细介绍如何使用Python最新技术构建一个高效、稳定的新华网新闻爬虫系统。本文详细介绍了如何使用Python最新技术栈构建一个高效、稳定的新华网新闻爬虫系统。我们从基础爬虫开始,逐步添加了代理支持、用户代理轮换、请求延迟、重试机制、动态页面渲染、数据存储等高级功能,最终实现了一个生产可用的分布式爬虫系统。

2201_76125261的博客 1754

代码随想录算法训练营day11(二叉树)

代码代码随想录算法训练营day11(二叉树)

huaz_md的博客 605

Synopsys逻辑工艺库(DC综合)

逻辑库包括仅与综合过程有关的信息且通过DC用于设计的综合和优化。这一信息包括引脚到引脚的时序、面积、引脚类型和功耗以及其他DC需要的必须数据。逻辑库是一个文本(通常扩展名".lib"),通过使用Library Compiler(LC)编译生成带有扩展名名".db"的二进制文件。以SMIC的逻辑综合库为例:库文件下载地址。

baidu_34971492的博客 2362

代码随想录算法训练营day11

今天是算法营的第11天,希望自己能够坚持下来!今日任务:● 150. 逆波兰表达式求值● 239. 滑动窗口最大值● 前 K 个高频元素● 总结今天主要是学习了:1.栈适合解决一些临近元素之间操作的问题2.deque和优先级队列的用法明天继续加油!

qq_38365428的博客 526

代码随想录算法训练营Day11|栈与队列Part2

遍历逆波兰表达式存储至栈,遇到运算符,则pop两个数值参与运算(先pop出的值放在运算符的后面参与运算),运算后的结果再存储至栈,循环以上操作。注意:当滑动窗口向后移动时,需要比较【单调队列中的首值】是否和【滑动窗口后移前的首值】相同,若相同,则需将单调队列中的首值popleft出。对元素出现的频率进行排序,可利用map(key存储元素,value存储元素出现次数)进行存储。比较,去除队列中比当前值小的值,保证队列永远是单减的。,大顶堆是根节点最大的元素,小顶堆是根节点最小的元素。数据结构,该类数据结构。

Lspeak的博客 349

代码随想录算法训练营第36期DAY11

Trick:因为左右括号在写IF判断是否匹配时,语句不好写,所以在扫描左半边(左括号们)入栈时,让它对应的右括号入栈,到右半边时,扫到等于就能pop。用曼哈顿距离来做:每个点和中心点的距离。思路一样,但是不好实现string str[]。图片来自代码随想录。不好写,因为有存”13” 传入的string数组。括号均从左开始,那么只需要一个栈。Check一下,思路和代码随想录的一样!简单,模拟一下,用一个指针一个栈就可以了。摘代码随想录的,自己的思路还是不够清晰。手写模拟了一下,不难。看了一下,代码,能写。

illuosion7的博客 1036

代码随想录算法训练营Day62|| 图论part11

算是一刷结束了,图论纯走马观花,晚点写个小总结吧。Floyd 算法和Astar算法

DetouringSnail的博客 336

代码随想录算法训练营_day11

寻找前k个最大元素流程如图所示:(图中的频率只有三个,所以正好构成一个大小为3的小顶堆,如果频率更多一些,则用这个小顶堆进行扫描)

qq_43745961的博客 459

代码随想录算法训练营DAY11|Leetcode 150、239、347

2. 题目要求“整数除法只保留整数部分”,而python中的 '/' 不是整除,‘//’是floor除法(向下舍入),因此要对除法做特殊处理(可以参考上述的示例代码),我自己的代码中用的是强制int转换。push(value):如果push的元素value大于入口元素的数值,那么就将队列入口的元素弹出,直到push元素的数值小于等于队列入口元素的数值为止。看完视频讲解和示例代码后,自己学着写代码。pop(value):如果窗口移除的元素value等于单调队列的出口元素,那么队列弹出元素,否则不用任何操作。

Itwillpasss的博客 1007

代码随想录算法训练营Day11

347.前 K 个高频元素 (有点难度,可能代码写不出来,一刷至少需要理解思路)本题不难,但第一次做的话,会很难想到,所以先看视频,了解思路再去做题。本题算比较有难度的,需要自己去构造单调队列,建议先看视频来理解。239. 滑动窗口最大值 (有点难度,可能代码写不出来,但一刷。本题是 大数据中取前k值 的经典思路,了解想法之后,不算难。大/小顶堆的应用, 在C++中就是优先级队列。之前讲的都是栈的应用,这次该是队列的应用了。150. 逆波兰表达式求值。栈与队列做一个总结吧,加油。

Tomatos_baby的博客 211

代码随想录算法刷题训练营day11

代码随想录算法刷题训练营day11LeetCode(20)有效的括号、LeetCode(1047)删除字符串中的所有相邻重复项、LeetCode(150)逆波兰表达式求值

m0_46478505的博客 1210

代码随想录训练营 Day62打卡 图论part11 Floyd 算法 A * 算法

代码随想录训练营 Day62打卡 图论part11 Floyd 算法 A * 算法

qq_42952637的博客 1691

代码随想录算法训练营打卡day11

如果采用大顶堆,那么我们pop时会先pop父节点,这样就导致了我们最后留下的是前k小的出现频率,不合题意,因此应该采用小顶堆。我们会有惯性思维就是要三个数入队列,但实际上,只需让三个数中最大的数入队列,然后最大数前面的数弹出,最大数后面的数保留,这样遍历完整个数组,时间复杂度较小,也不会遗漏数据。这道题的难点在于要想到自己构造一个新的队列类型,使之能够实现push的同时弹出元素,pop时只弹出队列第一个元素的功能,这就需要运用到deque双向队列,这种队列两端都可以实现入队列和出队列的功能。

aaal1234的博客 433

数据库连接算法详解:从基础概念到嵌套循环优化

2.重复键在归并连接中的处理:排序归并连接遇到相同键时,需要保存或回溯同一键对应的记录组,然后输出笛卡尔积。(2)外连接:即使一方没有数据,也保留该侧数据,用NULL填充。对S中的键计算哈希值;(3)连接基数:连接结果的行数可能远大于任意一张输入表。设外表有R个页面,内表S个页面,比较次数O(R+R*S)5.哈希连接的限制:最适用于等值连接,不直接适用于比较。(1)build阶段:对较小的关系R建立哈希表。(1)内连接:只保留两张表之中能够匹配的内容。若R有M行,S有N行,则比较次数为O(MN)

jiangxiaohanya的博客 230

【机器人领域】基于国产化硬件与开源软件的四足机器人技术架构:宇树机器狗Go2 Air核心部件拆解与行业应用分析

内容概要:通过对宇树科技2025款机器狗Go2 Air的深度拆解与技术分析,全面解析其产业链结构、核心技术优势与行业应用实践。报告重点剖析了机器狗的硬件架构(如主控板、激光雷达、四肢执行器、电池系统)、软件技术栈(包括VILENS多传感器融合定位算法、unitree_legged_sdk开源控制框架、Sim2Real仿真迁移能力)以及“执行器自研+算法开源”的核心壁垒。同时揭示了其在消费级与工业级市场的广泛应用场景,如电力巡检、管廊巡检、教育科研等,并指出当前面临的续航、便携性、信号稳定性等现实挑战。

鸿蒙系统官方最全教程,鸿蒙系统开发从入门到精通,生态案例和模板,工具配置,技术解读,常见问题解答

华为鸿蒙系统是一款全面覆盖全场景智慧体验的分布式操作系统,它的官方最全教程旨在帮助开发者从入门到精通,全面掌握鸿蒙系统的开发技能。该教程包含了丰富的生态案例和模板,以及各种工具的配置和使用方法,技术解读和常见问题解答。通过学习该教程,开发者可以更加深入地了解鸿蒙系统的运作原理,掌握各种开发技能,从而更好地进行应用开发。此外,该教程还提供了丰富的生态案例和模板,开发者可以从中获得灵感和参考,从而更好地进行应用开发和设计。同时,该教程还提供了各种工具的配置和使用方法,帮助开发者更加高效地进行应用开发和调试。总之,华为鸿蒙系统官方最全教程是开发者学习鸿蒙系统开发技能的必备资料,从入门到精通,全面覆盖全场景智慧体验的分布式操作系统。

上一篇: 代码随想录算法训练营 day10
下一篇: 代码随想录算法训练营 day13
月亮偷着哭...
博客等级 码龄7年 21粉丝 · 32原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值