day 3

2023-05-16

 用栈来做是最简便的:

栈(stack)是一种数据结构,遵循先进后出的原则

最常用的方法为stack.pop弹出最顶部的元素并删除

stack.peek弹出最顶部的元素查看,但不删除

stack.push 添加一个元素

代码1,较复杂,但容易理解

public boolean isValid(String s) {
        //通过栈来解决
        //1.栈用来存放字符串中左括号,当遍历到右括号时,先看栈里是不是空的
        //如果栈里是空的,说明没有左括号,或者右括号多出来了
        //2.如果栈不是空的,就把栈里元素弹出来与右括号比对,如果匹配,
        // 就弹出来并且从栈里删除,这时候一对括号就匹配成功了。如果不匹配,那么也
        //返回false
        //3.当遍历结束后,栈应该是空的,如果不为空则是左括号多了,因而需要再次判定empty
        if (s.isEmpty()) {
            return false;
        }
        Stack<Character> stack = new Stack<>();//加泛型符号
        for (int i = 0; i < s.length(); i++) {
            char ch = s.charAt(i);
            if (ch == '(' || ch == '[' || ch == '{') {
                stack.push(ch);//如果都是左括号,则先入栈
            } else {//右括号
                if (stack.isEmpty()) {//右括号多了
                    return false;
                }
                char top = stack.peek();
                if (top == '{' && ch == '}' || top == '(' && ch == ')' || top == '[' && ch == ']') {
                    stack.pop();//某一对匹配成功
                } else {
                    return false;
                }
            }
            if (!stack.empty()) {
                return false;
            }
        }
        return true;
    }

思路2,也是通过栈实现,但代码简洁

public boolean isValid1(String s) {
        if (s.isEmpty()) {
            return false;
        }
        Stack<Character> stack = new Stack<>();
        for (int i = 0; i < s.length(); i++) {
            char ch = s.charAt(i);
            if (ch == '(') {//这些if语句让栈里存放与左括号匹配的括号
                stack.push(')');
            } else if (ch == '[') {
                stack.push(']');
            } else if (ch == '{') {
                stack.push('}');
            } else if (stack.isEmpty() || stack.pop() != ch) {
                return false;//栈为null说明遇到右括号多出来了;
                //或者弹出的元素如果与ch不匹配也返回false
            }
        }
        return stack.isEmpty();//左括号多了则返回false,为null则返回true
    }

Leecode题目2

思路:


//遍历l1和l2**
//以l1为核心去求和,遇到10进位1,然后返回链表**
//但会遇到这些情况
//1.链表1比链表2长:下面是以l1为核心遍历,在while语句中加个
// if语句,l2遍历完后为null则停止遍历,只剩下l1继续向后遍历
//2.链表2比链表1长:l2遍历结束后,l1还没结束,将导致提前退出l1的遍历循环,结果不完整
//因而需要加一个if语句,当l1.next为null,但l2不为null时,把l1.next=l2;
//3.解决末尾需要进位的情况,末尾需要进位,但链表已遍历完
//解决方案:在函数位置判断是否大于10的if语句里,去判断l1.next是否为空,如果为空,则给它构造一个新节点  

问题1对应的[1,2,3], [1,2]-》》》【2,4,3】

问题2对应的[1,2],[1,5,3]-》》》【2,7,3】

问题3对应的[1,3,9]  [3,1,2] ->>>【4,4,1,1】

 public ListNode addTwoNumbers(ListNode l1,ListNode l2 ){
        ListNode head1=l1;//让head1代替l1去遍历,后面l1在进位时还需遍历
        ListNode head2=l2;//直接用l2也可
       //遍历并求和
        while (head1!=null){
            //如果head1不为null则,一直取head1向后遍历
            if(head2!=null){
                head1.val+=head2.val;
                head2=head2.next;
                if(head1.next==null&&head2!=null){
                    head1.next=head2; //该if语句解决上面问题2
                    break;//**相当于把head2比head1多的部分插到head1后面了
                          //且head2也不用相加了,因为它本身肯定小于10,所以直接退出循环**
                }
            }
            head1=head1.next;
        }
        //上面代码实现了两个链表对应每一个节点的求和
        //由于链表求和过程中遇到大于等于10的数需要进位,通过定义函数实现
        func(l1);//进位操作也是需要遍历一遍,看是否有大于10的数,
                 // 因而从l1开始,head1此时已经遍历到最后,这也是通过head1记录下来l1节点位置的原因
        return l1;
    }
    public void func(ListNode l1){
         while (l1!=null){
             if(l1.val>=10){
                 l1.val=l1.val%10;//得到进位后的值
                 if(l1.next==null){
                     l1.next= new ListNode(0);
                 }//解决问题3
                 l1.next.val+=1;//给下一节点的值进位
             }
             l1=l1.next;//继续遍历

         }
    }

public int halfQuestions(int[] questions) {
         int[]arr=new int[1001];//定义一个数组统计包含各种类型的个数
              for(int question:questions){
                  arr[question]++;//数组里对应的是每道题包含的知识点类型
              }
              //统计好知识点类型
              Arrays.sort(arr);//排序好
              int  count=0;
              int n=questions.length/2;
              for (int i = arr.length-1; i >=0 ; i--) {
                  n=n-arr[i];//减去
                  count++;//每减去一次个数都说明题型+1
                  if(n<=0){
                      //说明选择完毕,或者下次溢出
                      break;
                  }
              }
              return count;
          }

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

day 3 的相关文章

  • 自媒体视频剪辑有哪些技巧需要注意?

    前几期内容跟粉丝们分享了账号注册 账号定位 素材资源 xff0c 接下来就到了比较关键的内容剪辑部分了 大周这里说的剪辑并不是简单的视频画面拼接 xff0c 如果只是简单的拼凑内容 xff0c 我想你也不会喜欢看吧 xff1f 首先我们要学
  • 利用汇编语言实现1-5的数字阶乘并求和

    开发环境masm 代码如下 xff1a assume cs code ds data data segment dw 1 2 3 4 5 dd 0 data ends code segment start mov ax data mov d
  • 事件监听的理解(ActionListener等)

    Java事件监听机制在GUI应用的比较多 我们会时常对界面进行一系列的操作 如文本框输入 添加删除按钮等等 当进行这些操作时 xff0c 程序就会采取相应措施相应这些事件 一 事件监听有三部分组成 xff1a 事件源 xff0c 事件 xf
  • 【HAL库-STM】智能温控按键小风扇【胎教级教学】

    嗨害嗨 xff01 失踪人口回来了 xff01 吐血五天实现小成品 xff08 能力有限 呃呃呃呃呃 xff09 那么回归正题 xff0c 这次是智能温控小风扇我在这个基础上又加了一个按键控制功能 xff0c 当人在的风扇面前时可以自行控制
  • (STM32笔记5)ws2812驱动开发

    ws2812 需要开发的外设 xff1a ws2812 开发环境 xff1a MDK 开发板 xff1a stm32最小系统板 杜邦线无数 一 原理阐述 xff08 一 xff09 这个ws2812有很多种 xff0c 一个小灯 灯带 xf
  • 【python】天天向上的力量

    题干 xff1a 一年365天 xff0c 以第1天的能力值为基数 xff0c 记为1 0 当好好学习时 xff0c 能力值相比前一天提高N xff1b 当没有学习时 xff0c 由于遗忘等原因能力值相比前一天下降N 每天努力或放任 xff

随机推荐

  • 【IAR】错误:Error while running Linker

    IAR ZStack CC2530单播 错误 xff1a Error e27 Entry 34 GenericApp HandleKeys relay 34 in module EndDevice D Projects CC2530DB C
  • C语言基础一小时复习

    一 system 函数 1 头文件 include lt stdlib gt 2 里面可以写 cmd命令 可以打开外部程序用 或者 二 数据类型 1 基本类型 整型 xff1a int short long long long 字符型 xf
  • 竞赛练习题Ⅰ

    第一题 xff1a 回文数 取自CSDN竞赛第22期第四题 题干 xff1a 给定任意一个数字 m xff0c 然后给出数字 n xff0c 则需在 m 中去掉 n 位数 xff0c 保持各位顺序不变的情况下 xff0c 得到最大数 实例
  • HAL库--定时器--PWM呼吸灯实验和非PWM呼吸灯实验

    1 呼吸灯原理分析 xff1a 模拟人体呼吸 xff0c 吸气和呼气各占1 5S xff0c 人眼的图像滞留时间0 04s 1 24帧画面 xff0c 按最快0 04s算 xff0c 就是40ms 亮0 02S xff0c 灭0 02s x
  • 获取form表单的有name属性的value值

    span class token keyword var span model span class token operator 61 span span class token punctuation span span class t
  • Python+Webdriver实现淘宝、京东等抢单操作

    最近双十一已经到了 xff0c 笔者为了拓展技术水平研究了一下网络爬虫技术 xff0c 其中双十一给人印象最深刻地就是抢单了 xff0c 爬虫学的好 xff0c 监狱进得早 本着学术和技术研究的态度 xff0c 笔者仅使用了普通商品进行测试
  • 记录一下如何使用IDEA(2022.2.4版本)创建一个web项目

    1 xff0c 下载IDEA专业版 具体下载安装请自行搜索教程 在校学生有教育邮箱可以进行认证 xff0c 然后免费使用 xff08 具体做法可以自行搜索 xff09 xff08 好像IDEA社区版不行 xff0c 会在后面有些地方卡住 x
  • 计算机操作系统 | 必学生产者-消费者问题 | 参考自王道考研 | 无知的我学习日记(图文排版无水印)

    为了深入计算机底层 xff0c 我正在基于 王道考研 学习计算机操作系统 笔记特点是 我重新整理了涉及资料的一些语言描述 排版 xff0c 而使用了自己比较容易理解的描述 同样是回答了一些常见关键问题 如果有遇到有任何无法进展问题或者疑惑的
  • 对Ajax的一些理解

    什么是Ajax Ajax 61 Asynchronous JavaScript and XML 异步的 JavaScript 和XML Ajax 不是新的编程语言 xff0c 而是一种使用现有标准的新方法 Ajax是一种用于创建快速动态网页
  • 启动hdfs 三种方法

    启动hdfs 三种方法 star all sh 1 手动启动和停止hdfs节点 启动 在master上 xff1a hadoop daemon sh start namenode 在三台主机 xff1a hadoop daemon sh s
  • 基于Maven的Mybatis开发环境搭建

    1 首先我们需要创建一个基于Maven的java项目 2 在数据库中创建一张表及在idea中创建对应实体类 package com ffyc mybatisdemo model public class Admin private int
  • C++程序员这行能干一辈子吗?

    有人说 xff0c 程序员这一行就是吃青春饭 xff0c 不能干一辈子 xff0c 因为程序员面对的是一份高强度的工作 xff0c 同时面临着技术的快速迭代 xff0c 对于身体素质 学习能力等都有很高的要求 xff0c 所以很多人都面临入
  • 新装的centos7使用ip addr 命令不显示ens33的ip地址

    由于需要 xff0c 又重新装了几台虚拟机 xff0c 都是不同的ip xff0c 新装的虚拟机都不会显示ens33 下面的ip地址 就像这样 xff1a 输入 cd etc sysconfig network scripts 把对应的含有
  • GoLang之ACM控制台输入输出

    文章目录 GoLang之控制台输入输出1 源码1 1Scan1 2Scanf1 3Scanln 2 函数使用2 1scan输入单个参数时 xff0c 遇到回车会停止 多行 2 2scan输入单个参数时 xff0c 遇到空格会停止 多行 2
  • 基于SpringBoot+VUE的服装销售商城管理系统

    项目背景 随着科学技术的飞速发展 xff0c 社会的方方面面 各行各业都在努力与现代的先进技术接轨 xff0c 通过科技手段来提高自身的优势 xff0c 服装销售商城当然也不能排除在外 服装销售商城是以实际运用为开发背景 xff0c 运用软
  • 用Selenium定位充满div class页面元素的方法,id、xpath都没用的抓狂情况下

    以搜狐网首页为例 xff0c 我们要定位 搜狗邮箱 这个链接 xff08 如果是xpath等等各种selenium内置提供的定位方法都没用的情况下 xff09 第一步 xff0c 找到该元素 xff0c 此时显示 lt div class
  • SEC物权链奖金制度分析

    启程SEC物权链是什么 xff1f 靠谱吗 xff1f SEC公链是什么 xff1f 物权链怎么样 xff1f 分析于下 xff1a 一 定位 xff1a 依托原中小企业上市包装辅导策划以及不良资产运作等业务 xff0c 130家实体资产分
  • 基于SSM的个人健康信息管理

    项目背景 随着科学技术的飞速发展 xff0c 通过科技手段提高自身的优势 xff1b 对于个人健康信息管理当然也不能排除在外 xff0c 随着网络技术的不断成熟 xff0c 带动了个人健康信息管理 xff0c 它彻底改变了过去传统的管理方式
  • 基于spring boot的个人博客系统的设计与实现

    末尾获取源码 开发语言 xff1a Java Java开发工具 xff1a JDK1 8 后端框架 xff1a SpringBoot 前端 xff1a Vue 43 HTML 数据库 xff1a MySQL5 7和Navicat管理工具结合
  • day 3

    用栈来做是最简便的 栈 stack 是一种数据结构 xff0c 遵循先进后出的原则 最常用的方法为stack pop弹出最顶部的元素并删除 stack peek弹出最顶部的元素查看 xff0c 但不删除 stack push 添加一个元素