【算法】集合List和队列
阿华代码,不是逆风,就是我疯
你们的点赞收藏是我前进最大的动力!!
希望本文内容能够帮助到你!!
目录
零:集合,队列的用法
一:字母异位词分组
二:二叉树的锯齿形层序遍历
三:二叉树的最大宽度
四:在每个树行中找最大值
零:集合,队列的用法
1:new 一个队列
Queue<> queue = new LinkedList<>();
2:入队
queue.add();
3:出队
queue.poll();
4:队列的大小
queue.size();常用于for循环,用foreach循环也能达到目的
一:字母异位词分组
49. 字母异位词分组


class Solution {public List<List<String>> groupAnagrams(String[] strs) {List<List<String>> lists = new ArrayList<List<String>>();Map<String , List<String>> map = new HashMap<>();for(int i = 0 ; i < strs.length ; i++){String curStr = strs[i];String change = sort(strs[i]);if(map.containsKey(change)){//包含map.get(change).add(curStr);}else{//不包含List<String> list = new ArrayList<>();list.add(curStr);map.put(change,list);}}for(Map.Entry<String,List<String>> entry : map.entrySet()){lists.add(entry.getValue());}return lists;}//给字符串排序public String sort(String s){char[] ch = s.toCharArray();Arrays.sort(ch);return String.valueOf(ch);}
}
二:二叉树的锯齿形层序遍历
103. 二叉树的锯齿形层序遍历
心得:
1:集合在反转的时候返回类型为void,不能因为偷懒写成lists.add(Collections.reverse(list));

2:在判定当前节点的val是否入集合,和孩子节点是否入队列时。干脆全都判断一下是否为null,当然有更简洁的写法,这里求稳

3:队列判断空,用的是.isEmpty(); 不是null!!!

4:集合翻转用的是Collections.reverse();
5:这里的标志符sign也可以使用int类型,模2判断奇偶

/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {public List<List<Integer>> zigzagLevelOrder(TreeNode root) {// 思路沿用基础的模版,添加一个标志符用于逆序,谁逆序队列里的元素逆序List<List<Integer>> lists = new ArrayList<>();if (root == null)return lists;Queue<TreeNode> queue = new LinkedList<>();queue.add(root);Boolean sign = true;while (!queue.isEmpty()) {List<Integer> list = new ArrayList<>();int size = queue.size();for (int i = 0; i < size; i++) {// 让对头元素的val值进入集合,再让该元素的左右孩子入队TreeNode curNode = queue.poll();if (curNode != null) {list.add(curNode.val);}if (curNode.left != null) queue.add(curNode.left);if (curNode.right != null) queue.add(curNode.right);}if (sign == true) {lists.add(list);sign = false;} else {Collections.reverse(list);lists.add(list);sign = true;}}return lists;}
}
三:二叉树的最大宽度
662. 二叉树最大宽度
心得:
1:用集合来模拟队列
因为有些队列的容器只能查到队头,查不到队尾,使用集合可以很容易计算出该层的宽度
2:新认识一个类型Pair<>类型,可以将两个无关联的类型数据联系在一起
这是java8引进的
3:Pair的用法 .getKey() , .getValue() 通常搭配遍历来使用,这道题暴力解法会溢出



/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/// 使用Pair 类型标识节点+下标
// 使用层序遍历的方式,但是使用集合的形式模拟队列
class Solution {public int widthOfBinaryTree(TreeNode root) {// 先把根节点入队List<Pair<TreeNode, Integer>> q = new ArrayList<>();q.add(new Pair<>(root, 1));int ret = 0; // 存储最终结果while (!q.isEmpty()) {// 先更新一下结果// 获取这一层的队头和队尾Pair<TreeNode, Integer> t1 = q.get(0);Pair<TreeNode, Integer> t2 = q.get(q.size() - 1);ret = Math.max(ret, t2.getValue() - t1.getValue()+1);// 然后遍历下一层把它们的孩子放进新的队列,进行覆盖List<Pair<TreeNode, Integer>> tem = new ArrayList<>();for(Pair<TreeNode,Integer> t : q){//获取当前层的当前节点TreeNode node = t.getKey();Integer index = t.getValue();if(node.left != null){tem.add(new Pair<>(node.left,2*index));}if(node.right != null){tem.add(new Pair<>(node.right,2*index+1));}}q = tem;}return ret;}
}
四:在每个树行中找最大值
515. 在每个树行中找最大值

/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {public List<Integer> largestValues(TreeNode root) {List<Integer> list = new ArrayList<>();Queue<TreeNode> queue = new LinkedList<>();if(root == null) return list;queue.add(root);while (!queue.isEmpty()) {int num = Integer.MIN_VALUE;Queue<TreeNode> q = new LinkedList<>();for (TreeNode node : queue) {if (node != null) {num = Math.max(num, node.val);if (node.left != null) {q.add(node.left);}if (node.right != null) {q.add(node.right);}}}list.add(num);queue = q;}return list;}
}
五: 汇总区间
228. 汇总区间
感悟:最讨厌边界问题了,呕!!!~~~干就完了
然后就是StringBuilder尾追的时候,支持很多类型!!!!

class Solution {public List<String> summaryRanges(int[] nums) {int n = nums.length;List<String> list = new ArrayList<>();int i = 0 ; for(; i < n ;i++){int start = nums[i];while(i + 1 < n && nums[i+1] - nums[i] == 1){i++;}if(i + 1 == n - 1 && nums[i+1] - nums[i] == 1){i = n-1;}int end = nums[i];StringBuilder builder = new StringBuilder();if(start != end){builder.append(start);builder.append("->");builder.append(end);}else{builder.append(start);}list.add(builder.toString());}if(i == n-1){int last = nums[n-1];StringBuilder builder = new StringBuilder();builder.append(last);list.add(builder.toString());return list;}return list;}
}
相关文章:
【算法】集合List和队列
阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 零:集合,队列的用法 一:字母异位词分组 二:二叉树的锯…...
uniapps使用HTML5的io模块拷贝文件目录
最近在集成sqlite到uniapp的过程中,因为要将sqlite数据库预加载,所以需要使用HTML5的plus.io模块。使用过程中遇到了许多问题,比如文件路径总是解析不到等。尤其是应用私有文档目录’_doc’。 根据官方文档: 为了安全管理应用的…...
css‘s hover VS mobile
.animation {animation: 30s move infinite linear;/* &:hover {animation-play-state: paused;*/ }原本写的好好的,测试说:“移动端点击滚动条,跳转到其他页面后,返回当前页面,滚动条不滚动;可以优化位…...
工业制造离不开的BOM
在制造业的浩瀚星空中,物料清单(BOM)犹如“北极星”,牢牢指引着产品从设计蓝图迈向实物诞生的全过程。 BOM的分类 按照设计制造的不同阶段,将BOM划分为设计BOM、工艺BOM、制造BOM三种类型。 设计BOM Engineering BO…...
HTML中的`<!DOCTYPE html>`是什么意思?
诸神缄默不语-个人CSDN博文目录 在学习HTML时,我们经常会看到HTML文档的开头出现<!DOCTYPE html>,它是HTML文件的第一行。很多初学者可能会疑惑,为什么需要这行代码?它到底有什么作用呢?在这篇文章中࿰…...
C语言之斗地主游戏
🌟 嗨,我是LucianaiB! 🌍 总有人间一两风,填我十万八千梦。 🚀 路漫漫其修远兮,吾将上下而求索。 C语言之斗地主游戏 目录 程序概述程序设计 Card类CardGroup类Player类LastCards类Land…...
【玩转全栈】----Django制作部门管理页面
目录 大致效果 BootStrap BootStrap简介 BootStrap配置 BootStrap使用 基本配置 部分代码解释及注意: 用户编辑: 新添数据: 删除数据: 大致效果 我先给个大致效果,基本融合了Django、Bootstrap、css、html等等。 基于D…...
Unreal Engine 5 C++ Advanced Action RPG 十章笔记
第十章 Survival Game Mode 2-Game Mode Test Map 设置游戏规则进行游戏玩法 生成敌人玩家是否死亡敌人死亡是否需要刷出更多 肯定:难度增加否定:玩家胜利 流程 新的游戏模式类游戏状态新的数据表来指定总共有多少波敌人生成逻辑UI告诉当前玩家的敌人波数 3-Survival Game M…...
学习ASP.NET Core的身份认证(基于JwtBearer的身份认证9)
测试数据库中只有之前记录温湿度及烟雾值的表中数据较多,在该数据库中增加AppUser表,用于登录用户身份查询,数据库表如下所示: 项目中安装SqlSugarCore包,然后修改控制器类的登录函数及分页查询数据函数ÿ…...
缓存之美:万文详解 Caffeine 实现原理(上)
由于社区最大字数限制,本文章将分为两篇,第二篇文章为缓存之美:万文详解 Caffeine 实现原理(下) 大家好,我是 方圆。文章将采用“总-分-总”的结构对配置固定大小元素驱逐策略的 Caffeine 缓存进行介绍&…...
Spark/Kafka
文章目录 项目地址一、Spark1. RDD1.1 五大核心属性1.2 执行原理1.3 四种创建方式二、Kafka2.1 生产者(1)分区器(2)生产者提高吞吐量(3) 生产者数据可靠性数据传递语义幂等性和事务数据有序2.2 Broker(1)Broker工作流程(2)节点服役和退役2.3 副本(1)Follower故障细…...
深入浅出:Go语言中的Unicode与字符编码详解
深入浅出:Go语言中的Unicode与字符编码详解 引言 在当今的编程世界中,字符编码和Unicode是不可或缺的技术基础。Go语言作为一种强大的编程语言,其对Unicode的支持和字符编码的处理方式,对于开发者来说至关重要。本文将从Unicode的基础知识入手,逐步深入探讨Go语言中字符编…...
什么是SSL及SSL的工作流程
什么是 SSL SSL(Secure Sockets Layer,安全套接层)是一种保护互联网通信安全的加密协议,用于确保数据在客户端和服务器之间传输时的保密性、完整性和身份验证。它已被TLS(Transport Layer Security,传输层安全协议)取代,但很多场景仍习惯称其为SSL。 SSL/TLS 的主要目…...
.Net Core微服务入门全纪录(二)——Consul-服务注册与发现(上)
系列文章目录 1、.Net Core微服务入门系列(一)——项目搭建 2、.Net Core微服务入门全纪录(二)——Consul-服务注册与发现(上) 3、.Net Core微服务入门全纪录(三)——Consul-服务注…...
AD7606, 逐次逼近型ADC以及一次被GPT坑了的过程.
首先, 我的项目中, 已有的一个ADC芯片, 8通道, 并行, Analog家的ad7606, 在采集高速的正弦信号的时候, 我发现采集到的值怎么都不太对. 但是宏观来看, 并没有太大问题, 首先我怀疑的是量程问题, 接入一个5伏直流, 得到的读数确实是接近16bit的正半量程的读数, 32xxx. 接着我用信…...
抬手、放手识别算法
在一款智能手表中, 平时手表处于息屏的状态, 用于节省功耗,延长使用时间。 在用户进行抬手的时候,其实是希望能够及时看一下时间、消息通知等信息的。这时手表应该能够检测到用户的抬手动作,自动进行屏幕的点亮。当用户…...
深度学习篇---AnacondaLabelImg
文章目录 前言第一部分:Anaconda是什么?1.简介2.特点(1)包管理器Conda(2)环境管理(3)预装包(4)跨平台(5)社区支持 3.安装WindowsLinux…...
探索云原生可观测性:技术与团队协作的深度结合
TheNewStack 出品的电子书《Cloud Native Observability for DevOps Teams》读后感,老书新读,还是另有一番领悟。 阅读原文请转到:https://jimmysong.io/blog/cloud-native-observability-devops/ 最近读了 TheNewStack 发布的电子书《Cloud …...
解决 Django 5.1 中的 TemplateSyntaxError 错误
解决 Django 5.1 中的 TemplateSyntaxError 错误 在 Django 开发过程中,我们经常会遇到 TemplateSyntaxError 错误,尤其是在模板文件中使用不被支持或错误的模板标签时。最近,我们遇到的一个常见错误是: Invalid block tag on l…...
基于SSM的自助购药小程序设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
数据结构第5章:树和二叉树完全指南(自整理详细图文笔记)
名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 原创笔记:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 上一篇:《数据结构第4章 数组和广义表》…...
数据结构:泰勒展开式:霍纳法则(Horner‘s Rule)
目录 🔍 若用递归计算每一项,会发生什么? Horners Rule(霍纳法则) 第一步:我们从最原始的泰勒公式出发 第二步:从形式上重新观察展开式 🌟 第三步:引出霍纳法则&…...
生产管理系统开发:专业软件开发公司的实践与思考
生产管理系统开发的关键点 在当前制造业智能化升级的转型背景下,生产管理系统开发正逐步成为企业优化生产流程的重要技术手段。不同行业、不同规模的企业在推进生产管理数字化转型过程中,面临的挑战存在显著差异。本文结合具体实践案例,分析…...
信息收集:从图像元数据(隐藏信息收集)到用户身份的揭秘 --- 7000
目录 🌐 访问Web服务 💻 分析源代码 ⬇️ 下载图片并保留元数据 🔍 提取元数据(重点) 👤 生成用户名列表 🛠️ 技术原理 图片元数据(EXIF 数据) Username-Anarch…...
OCC笔记:TDF_Label中有多个相同类型属性
注:OCCT版本:7.9.1 TDF_Label中有多个相同类型的属性的方案 OCAF imposes the restriction that only one attribute type may be allocated to one label. It is necessary to take into account the design of the application data tree. For exampl…...

