当前位置: 首页 > news >正文

力扣爆刷第158天之TOP100五连刷56-60(子集、最小栈、最长有效括号)

力扣爆刷第158天之TOP100五连刷56-60(子集、最小栈、最长有效括号)

文章目录

      • 力扣爆刷第158天之TOP100五连刷56-60(子集、最小栈、最长有效括号)
      • 一、78. 子集
      • 二、105. 从前序与中序遍历序列构造二叉树
      • 三、43. 字符串相乘
      • 四、155. 最小栈
      • 五、32. 最长有效括号

一、78. 子集

题目链接:https://leetcode.cn/problems/subsets/description/
思路:对于子集问题,典型的回溯解法,搜集所有子集即每一个节点都参与收集,而且子集不要求顺序,是组合类型,需要指定回溯的起始位置。而且元素无重不需要去重。

class Solution {List<List<Integer>> result = new ArrayList<>();List<Integer> list = new ArrayList<>();public List<List<Integer>> subsets(int[] nums) {backTracking(nums, 0);return result;}void backTracking(int[] nums, int index) {result.add(new ArrayList(list));for(int i = index; i < nums.length; i++) {list.add(nums[i]);backTracking(nums, i+1);list.remove(list.size()-1);}}
}

二、105. 从前序与中序遍历序列构造二叉树

题目链接:https://leetcode.cn/problems/construct-binary-tree-from-preorder-and-inorder-traversal/description/
思路:这也是很经典的一个题目了,构造二叉树只需要知道根节点的位置就可以进行划分区间,而前序遍历第一个位置就是根节点,所以,思路是利用前序遍历找到根节点然后去中序遍历中划分左右区间,然后递归进行,只不过为了快速定位根节点在中序中的位置,可以使用map记录对应关系。

class Solution {Map<Integer, Integer> map = new HashMap<>();public TreeNode buildTree(int[] preorder, int[] inorder) {for(int i = 0; i < inorder.length; i++) {map.put(inorder[i], i);}return createTree(preorder, inorder, 0, preorder.length-1, 0, inorder.length-1);}TreeNode createTree(int[] preorder, int[] inorder, int lp, int rp, int li, int ri) {if(lp > rp) return null;int mid = map.get(preorder[lp]);TreeNode node = new TreeNode(preorder[lp]);node.left = createTree(preorder, inorder, lp+1, lp+mid-li, li, mid-1);node.right = createTree(preorder, inorder, lp+mid-li+1, rp, mid+1, ri);return node;}
}

三、43. 字符串相乘

题目链接:https://leetcode.cn/problems/multiply-strings/description/
思路:字符串相乘,首先确定拼接方法,采用数组拼接,方便计算,长度的话,两个字符串长度相加的长度正好覆盖最大乘积,至于进位如何计算,因为每次相乘都是个位数进行相乘,结果不会超过两位,所以维护两位的窗口,后一位用来累加进位,前一位作为进位。以此往复即可。

class Solution {public String multiply(String num1, String num2) {int n = num1.length(), m = num2.length();int[] nums = new int[n + m];for(int i = n-1; i >= 0; i--) {for(int j = m-1; j >= 0; j--) {int x = (num1.charAt(i) - '0') * (num2.charAt(j) - '0');int p1 = i+j, p2 = i+j+1;int sum = x + nums[p2];nums[p2] = sum % 10;nums[p1] += sum / 10;}}int k = 0;while(k < nums.length) {if(nums[k] != 0) break;k++;}StringBuilder sb = new StringBuilder();for(int i = k; i < nums.length; i++) {sb.append(nums[i]);}return sb.length() == 0 ? "0" : sb.toString();}
}

四、155. 最小栈

题目链接:https://leetcode.cn/problems/min-stack/description/
思路:求最小栈,要求为就是一个正常的栈先进后出,然后可以常数时间获取最小值,其实只需要维护两个栈,一个栈正常入栈出栈,另一个栈是最小值,当前元素小于栈顶时才入栈,否则把栈顶元素重复入栈。

class MinStack {LinkedList<Integer> stack1 = new LinkedList<>();LinkedList<Integer> stack2 = new LinkedList<>();public MinStack() {}public void push(int val) {stack1.push(val);stack2.push(Math.min(val, stack2.isEmpty() ? val : stack2.peek()));}public void pop() {stack1.pop();stack2.pop();}public int top(){return stack1.peek();}public int getMin() {return stack2.peek();}
}

五、32. 最长有效括号

题目链接:https://leetcode.cn/problems/longest-valid-parentheses/description/
思路:用栈来做,栈内记录括号的索引,遇到左括号索引入栈,遇到右括号,栈顶出栈,然后判断栈是否为空,为空右括号索引入栈,不为空记录最大值。

class Solution {public int longestValidParentheses(String s) {LinkedList<Integer> stack = new LinkedList<>();stack.push(-1);int max = 0;for(int i = 0; i < s.length(); i++) {if(s.charAt(i) == '(') {stack.push(i);}else{stack.pop();if(stack.isEmpty()) {stack.push(i);}else{max = Math.max(max, i - stack.peek());}}}return max;}
}

相关文章:

力扣爆刷第158天之TOP100五连刷56-60(子集、最小栈、最长有效括号)

力扣爆刷第158天之TOP100五连刷56-60&#xff08;子集、最小栈、最长有效括号&#xff09; 文章目录 力扣爆刷第158天之TOP100五连刷56-60&#xff08;子集、最小栈、最长有效括号&#xff09;一、78. 子集二、105. 从前序与中序遍历序列构造二叉树三、43. 字符串相乘四、155. …...

高薪程序员必修课-Java中 Synchronized锁的升级过程

目录 前言 锁的升级过程 1. 偏向锁&#xff08;Biased Locking&#xff09; 原理&#xff1a; 示例&#xff1a; 2. 轻量级锁&#xff08;Lightweight Locking&#xff09; 原理&#xff1a; 示例&#xff1a; 3. 重量级锁&#xff08;Heavyweight Locking&#xff09;…...

Vue项目打包上线

Nginx 是一个高性能的开源HTTP和反向代理服务器&#xff0c;也是一个IMAP/POP3/SMTP代理服务器。它在设计上旨在处理高并发的请求&#xff0c;是一个轻量级、高效能的Web服务器和反向代理服务器&#xff0c;广泛用于提供静态资源、负载均衡、反向代理等功能。 1、下载nginx 2、…...

算法题中常用的C++功能

文章目录 集合优先队列双端队列排序时自定义比较函数最大数值字符串追加&#xff1a;删除&#xff1a;子串&#xff1a; 元组vector查找创建和初始化赋值&#xff1a; 字典map引入头文件定义和初始化插入元素访问元素更新元素删除元素检查元素存在遍历元素int和string转换 集合…...

左扰动和右扰动

在SLAM&#xff08;Simultaneous Localization and Mapping&#xff09;中&#xff0c;使用左扰动还是右扰动主要取决于你如何定义坐标系和你希望扰动影响的姿态表示。这通常与你的坐标系选择和你正在解决的具体问题有关。 左扰动通常用于以下情况&#xff1a; 当你使用局部坐…...

【计算机网络】期末复习(2)

目录 第一章&#xff1a;概述 第二章&#xff1a;物理层 第三章&#xff1a;数据链路层 第四章&#xff1a;网络层 第五章&#xff1a;传输层 第一章&#xff1a;概述 三大类网络 &#xff08;1&#xff09;电信网络 &#xff08;2&#xff09;有线电视网络 &#xff0…...

ojdbc8-full Oracle JDBC 驱动程序的一个完整发行版各文件的功能

文章目录 1. ojdbc8.jar2. ons.jar -3. oraclepki.jar -4. orai18n.jar -5. osdt_cert.jar -6. osdt_core.jar -7. ojdbc.policy -8. README.txt -9. simplefan.jar -10. ucp.jar -11. xdb.jar - ojdbc8-full 是 Oracle JDBC 驱动程序的一个完整发行版&#xff0c;包含了连接和…...

在Linux环境下使用sqlite3时,如果尝试对一个空表进行操作(例如插入数据),可能会遇到表被锁定的问题。

在Linux环境下使用sqlite3时&#xff0c;如果尝试对一个空表进行操作&#xff08;例如插入数据&#xff09;&#xff0c;可能会遇到表被锁定的问题。这通常是因为sqlite3在默认情况下会对空表进行“延迟创建”&#xff0c;即在实际需要写入数据之前&#xff0c;表不会被真正创建…...

【目标检测】DINO

一、引言 论文&#xff1a; DINO: DETR with Improved DeNoising Anchor Boxes for End-to-End Object Detection 作者&#xff1a; IDEA 代码&#xff1a; DINO 注意&#xff1a; 该算法是在Deformable DETR、DAB-DETR、DN-DETR基础上的改进&#xff0c;在学习该算法前&#…...

一文包学会ElasticSearch的大部分应用场合

ElasticSearch 官网下载地址&#xff1a;Download Elasticsearch | Elastic 历史版本下载地址1&#xff1a;Index of elasticsearch-local/7.6.1 历史版本下载地址2&#xff1a;Past Releases of Elastic Stack Software | Elastic ElasticSearch的安装(windows) 安装前所…...

创建kobject

1、kobject介绍 kobject的全称是kernel object&#xff0c;即内核对象。每一个kobject都会对应系统/sys/下的一个目录。 2、相关结构体和api介绍 2.1 struct kobject // include/linux/kobject.h 2.2 kobject_create_and_add kobject_create_and_addkobject_createkobj…...

数据结构 - C/C++ - 树

公开视频 -> 链接点击跳转公开课程博客首页 -> 链接点击跳转博客主页 目录 树的概念 结构特性 树的样式 树的存储 树的遍历 节点增删 二叉搜索树 平衡二叉树 树的概念 二叉树是树形结构&#xff0c;是一种非线性结构。 非线性结构&#xff1a;在二叉树中&#x…...

Linux源码阅读笔记12-RCU案例分析

在之前的文章中我们已经了解了RCU机制的原理和Linux的内核源码&#xff0c;这里我们要根据RCU机制写一个demo来展示他应该如何使用。 RCU机制的原理 RCU&#xff08;全称为Read-Copy-Update&#xff09;,它记录所有指向共享数据的指针的使用者&#xff0c;当要修改构想数据时&…...

【C++】双线性差值算法实现RGB图像缩放

双线性差值算法 双线性插值&#xff08;Bilinear Interpolation&#xff09;并不是“双线性差值”&#xff0c;它是一种在二维平面上估计未知数据点的方法&#xff0c;通常用于图像处理中的图像缩放。 双线性插值的基本思想是&#xff1a;对于一个未知的数据点&#xff0c;我…...

计算机网络知识普及之四元组

在涉及到TCP/UDP等IP类通信协议时&#xff0c;存在四元组概念 这里只是普及使用 先来一些前置知识&#xff0c;什么是IP协议&#xff1f; IP协议全称为互联网协议&#xff0c;处于网络层中&#xff0c;主要作用是标识网络中的设备&#xff0c;每个设备的IP地址是唯一的。 在网…...

深度探讨网络安全:挑战、防御策略与实战案例

目录 ​编辑 一、引言 二、网络安全的主要挑战 恶意软件与病毒 数据泄露 分布式拒绝服务攻击&#xff08;DDoS&#xff09; 内部威胁 三、防御策略与实战案例 恶意软件防护 网络钓鱼防护 数据泄露防护 总结 一、引言 随着信息技术的迅猛发展&#xff0c;网络安全问…...

“穿越时空的机械奇观:记里鼓车的历史与科技探秘“

在人类文明的发展历程中&#xff0c;科技的创新与进步不仅仅推动了社会的进步&#xff0c;也为我们留下了丰富的文化遗产。记里鼓车&#xff0c;作为一种古老的里程计量工具&#xff0c;其历史地位和技术成就在科技史上具有重要的意义。本文将详细介绍记里鼓车的起源、结构原理…...

DevOps CMDB平台整合Jira工单

背景 在DevOps CMDB平台建设的过程中&#xff0c;我们可以很容易的将业务应用所涉及的云资源&#xff08;WAF、K8S、虚拟机等&#xff09;、CICD工具链&#xff08;Jenkins、ArgoCD&#xff09;、监控、日志等一次性的维护到CMDB平台&#xff0c;但随着时间的推移&#xff0c;…...

Vue-路由

路由简介 SPA单页面应用。导航区和展示区 单页Web应用整个应用只有一个完整的页面点击页面中的导航连接不会刷新页面&#xff0c;只会做页面的局部更新数据需要通过ajax请求获取 路由&#xff1a;路由就是一组映射关系&#xff0c;服务器接收到请求时&#xff0c;根据请求路…...

【Rust入门教程】安装Rust

文章目录 前言Rust简介Rust的安装更新与卸载rust更新卸载 总结 前言 在当今的编程世界中&#xff0c;Rust语言以其独特的安全性和高效性吸引了大量开发者的关注。Rust是一种系统编程语言&#xff0c;专注于速度、内存安全和并行性。它具有现代化的特性&#xff0c;同时提供了低…...

告别爆显存!在16G显卡上高效训练SDXL LORA的完整配置流程

16G显卡极限优化&#xff1a;SDXL LORA训练全流程实战指南 引言 当你手握一块RTX 4060 Ti或4070这样的16G显存显卡&#xff0c;想要尝试SDXL LORA训练时&#xff0c;是否常被爆显存的恐惧支配&#xff1f;别担心&#xff0c;这不是硬件性能的终点&#xff0c;而是优化艺术的起点…...

Vue-Vben-Admin主题定制实战指南:从原理到实现的深度探索

Vue-Vben-Admin主题定制实战指南&#xff1a;从原理到实现的深度探索 【免费下载链接】vue-vben-admin vbenjs/vue-vben-admin: 是一个基于 Vue.js 和 Element UI 的后台管理系统&#xff0c;支持多种数据源和插件扩展。该项目提供了一个完整的后台管理系统&#xff0c;可以方便…...

Qwen2.5-72B-GPTQ开源大模型:农业病虫害识别与防治方案生成

Qwen2.5-72B-GPTQ开源大模型&#xff1a;农业病虫害识别与防治方案生成 1. 模型介绍 Qwen2.5-72B-Instruct-GPTQ-Int4是通义千问大模型系列的最新版本&#xff0c;专为复杂任务优化设计。这个72亿参数的模型经过指令调优和4-bit量化处理&#xff0c;在保持高性能的同时大幅降…...

深度解析跨平台音频驱动:FlexASIO实战配置指南

深度解析跨平台音频驱动&#xff1a;FlexASIO实战配置指南 【免费下载链接】FlexASIO A flexible universal ASIO driver that uses the PortAudio sound I/O library. Supports WASAPI (shared and exclusive), KS, DirectSound and MME. 项目地址: https://gitcode.com/gh_…...

GitHub中文界面插件:3分钟告别英文障碍,专注代码协作

GitHub中文界面插件&#xff1a;3分钟告别英文障碍&#xff0c;专注代码协作 【免费下载链接】github-chinese GitHub 汉化插件&#xff0c;GitHub 中文化界面。 (GitHub Translation To Chinese) 项目地址: https://gitcode.com/gh_mirrors/gi/github-chinese 你是否曾…...

2026论文写作工具红黑榜:AI论文工具怎么选?用数据说话!

2026年论文写作工具红黑榜出炉&#xff0c;千笔AI、ThouPen、豆包位列红榜&#xff0c;适配国内学术规范&#xff0c;助力高效科研。黑榜需避开低质免费工具、无真实引用平台及过度依赖全文生成的工具。选择时建议按需求匹配度 - 数据可信度 - 成本承受力三维模型进行评估。 一…...

GoodbyeDPI完全上手指南:从架构到实操的进阶之路

GoodbyeDPI完全上手指南&#xff1a;从架构到实操的进阶之路 【免费下载链接】GoodbyeDPI GoodbyeDPI — Deep Packet Inspection circumvention utility (for Windows) 项目地址: https://gitcode.com/GitHub_Trending/go/GoodbyeDPI 开源项目使用涉及对项目结构的深入…...

避坑指南:在ZYNQ上调试PCIe设备时,如何手动验证枚举与BAR空间配置是否正确

ZYNQ平台PCIe设备调试实战&#xff1a;手动验证枚举与BAR配置的工程方法论 当你在ZYNQ平台上调试PCIe设备时&#xff0c;是否遇到过这样的场景&#xff1a;Vivado中精心设计的PCIe链路通过了硬件测试&#xff0c;但系统启动后lspci却看不到设备踪影&#xff1f;或者设备虽然被识…...

免费领取《MapleSim卷材加工和卷绕系统建模仿真教程》

在薄膜、纸张、电池极片、电子材料等卷对卷加工中&#xff0c;你是否还在为张力波动、卷材打滑、收放卷不稳而头疼&#xff1f;物理样机调试成本高、风险大&#xff0c;单纯依靠经验难以解决复杂的动态耦合问题。 Maplesoft 中国技术团队近期发布了 MapleSim 卷材处理库&#…...

UNet全维度改进模型库重磅发布

突破边界&#xff0c;赋能工业质检&#xff1a;UNet全维度改进模型库重磅发布 在工业缺陷检测领域&#xff0c;分割精度与效率的平衡始终是技术落地的核心命题。我们倾力打造**「UNet全维度改进模型库」&#xff0c;以37项原创性结构创新为引擎&#xff0c;深度融合注意力机制…...