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

hot100(7)

61.31. 下一个排列 - 力扣(LeetCode)

数组问题,下一个更大的排列

题解:31. 下一个排列题解 - 力扣(LeetCode)

(1)从后向前找到一个相邻的升序对(i,j),此时(j,end)为降序

(2)从(j,end)从后向前找到一个大于i对应的数,其下标k,这个数就是要替换的“较小的大数”

(3)交换i和k对应的数

(4)此时(j,end)为降序,将(j,end)置为升序

public void nextPermutation(int[] nums) {int i,j,k;for(i = nums.length - 2 ; i >= 0 ; i--){if(nums[i] < nums[i+1]){break;}}j = i + 1;if(i == -1){Arrays.sort(nums);return ;}for(k = nums.length - 1 ; k >= j ; k--){if(nums[k] > nums[i]){break;}}int tmp = nums[i];nums[i] = nums[k];nums[k] = tmp;Arrays.sort(nums,j,nums.length);}

62.538. 把二叉搜索树转换为累加树 - 力扣(LeetCode)

一看到累加树,相信很多小伙伴都会疑惑:如何累加?遇到一个节点,然后再遍历其他节点累加?怎么一想这么麻烦呢。

然后再发现这是一棵二叉搜索树,二叉搜索树啊,这是有序的啊。

那么有序的元素如何求累加呢?

其实这就是一棵树,大家可能看起来有点别扭,换一个角度来看,这就是一个有序数组[2, 5, 13],求从后到前的累加数组,也就是[20, 18, 13],是不是感觉这就简单了。

为什么变成数组就是感觉简单了呢?

因为数组大家都知道怎么遍历啊,从后向前,挨个累加就完事了,这换成了二叉搜索树,看起来就别扭了一些是不是。

那么知道如何遍历这个二叉树,也就迎刃而解了,从树中可以看出累加的顺序是右中左,所以我们需要反中序遍历这个二叉树,然后顺序累加就可以了

像前面的数组的累加遍历,需要用到前一个处理过的元素的值和当前元素累加,本题页需要一个pre指针记录当前遍历节点cur的前一个节点,这样才方便做累加。

int prev = 0;public TreeNode convertBST(TreeNode root) {reverseInOrder(root);return root;}public void reverseInOrder(TreeNode root){if(root == null){return ;}reverseInOrder(root.right);root.val += prev;prev = root.val;reverseInOrder(root.left);}

63.23. 合并 K 个升序链表 - 力扣(LeetCode)

方法一:顺序合并
思路

我们可以想到一种最朴素的方法:用一个变量 ans 来维护以及合并的链表,第 i 次循环把第 i 个链表和 ans 合并,答案保存到 ans 中。

public ListNode mergeKLists(ListNode[] lists) {ListNode ans = null;for (ListNode list : lists) {ans = mergeTwoLists(ans,list);}return ans;}public ListNode mergeTwoLists(ListNode list1, ListNode list2) {ListNode head = new ListNode(0);ListNode p = head;ListNode pa = list1 , pb = list2;while(pa != null && pb != null){if(pa.val < pb.val){p.next = pa;pa = pa.next;}else{p.next = pb;pb = pb.next;}p = p.next;}p.next = (pa != null)? pa : pb;return head.next;}

public ListNode mergeKLists(ListNode[] lists) {return merge(lists,0,lists.length - 1);}public ListNode merge(ListNode[] lists,int l, int r){if(l == r){return lists[l];}if(l > r){return null;}int mid = l + (r - l)/2;return mergeTwoLists(merge(lists,l,mid),merge(lists,mid + 1, r));}public ListNode mergeTwoLists(ListNode list1, ListNode list2) {ListNode head = new ListNode(0);ListNode p = head;ListNode pa = list1 , pb = list2;while(pa != null && pb != null){if(pa.val < pb.val){p.next = pa;pa = pa.next;}else{p.next = pb;pb = pb.next;}p = p.next;}p.next = (pa != null)? pa : pb;return head.next;}

class Status implements Comparable<Status>{int val;ListNode ptr;Status(int val , ListNode ptr){this.val = val;this.ptr = ptr;}@Overridepublic int compareTo(Status o) {return this.val - o.val;}}public ListNode mergeKLists(ListNode[] lists) {PriorityQueue<Status> queue = new PriorityQueue<>();for (ListNode list : lists) {if(list != null){queue.offer(new Status(list.val,list));}}ListNode head = new ListNode(0);ListNode tail = head;while(!queue.isEmpty()){Status f = queue.poll();tail.next = f.ptr;tail = tail.next;if(f.ptr.next != null){queue.offer(new Status(f.ptr.next.val,f.ptr.next));}}return head.next;}

64.560. 和为 K 的子数组 - 力扣(LeetCode)

I枚举

枚举所有子数组并计算其和,枚举时先枚举结尾,再枚举开头,让开头倒序遍历,可以让后面的计算用到前面计算的结果。

public int subarraySum(int[] nums, int k) {int cnt = 0;for(int i = 0 ; i < nums.length ; i++){int sum = 0 ;for(int j = i ; j >= 0; j--){sum = sum + nums[j];if(sum == k){cnt++;}}}return cnt;}

时间复杂度O(n^2),空间复杂度O(1)

II 前缀和 + 哈希表

public int subarraySum(int[] nums, int k) {int pre = 0 ,cnt = 0;HashMap<Integer,Integer> map = new HashMap<>();map.put(0,1);for(int i = 0 ; i < nums.length ; i++){pre += nums[i];if(map.containsKey(pre - k)){cnt += map.get(pre - k);}map.put(pre,map.getOrDefault(pre,0) + 1);}return cnt;}

 65.21. 合并两个有序链表 - 力扣(LeetCode)

public ListNode mergeTwoLists(ListNode list1, ListNode list2) {ListNode head = new ListNode(0);ListNode p = head;ListNode pa = list1 , pb = list2;while(pa != null && pb != null){if(pa.val < pb.val){p.next = pa;pa = pa.next;}else{p.next = pb;pb = pb.next;}p = p.next;}p.next = (pa != null)? pa : pb;return head.next;}

66.20. 有效的括号 - 力扣(LeetCode)

public boolean isValid(String s) {Deque<Character> stack = new ArrayDeque<>();for(int i = 0 ; i < s.length() ; i++){if(isLeft(s.charAt(i))){stack.push(s.charAt(i));}else{if(stack.isEmpty()){return false;}else if(s.charAt(i) == ')'){if(stack.pop() != '('){return false;}}else if(s.charAt(i) == '}'){if(stack.pop() != '{'){return false;}}else if(s.charAt(i) == ']'){if(stack.pop() != '['){return false;}}}}return stack.isEmpty();}public boolean isLeft(char c){if(c == '(' || c == '{' || c =='['){return true;}return false;}

67.19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode)

快慢指针

dummyNode避免边界条件讨论

在纸上画出后观察边界条件

public ListNode removeNthFromEnd(ListNode head, int n) {ListNode dummyNode = new ListNode(0);dummyNode.next = head;ListNode fast = dummyNode,slow = dummyNode;for(int i = 0 ; i < n ; i++){fast = fast.next;}while(fast.next != null){fast = fast.next;slow = slow.next;}slow.next = slow.next.next;return dummyNode.next;}

68.17. 电话号码的字母组合 - 力扣(LeetCode)

回溯问题

String[] mapping = new String[]{"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};List<String> res = new ArrayList<>();StringBuilder path = new StringBuilder();String digits;public List<String> letterCombinations(String digits) {this.digits = digits;if(digits.isEmpty()){return res;}dfs(0);return res;}public void dfs(int index){if(index == digits.length()){res.add(new String(path));return ;}int digit = digits.charAt(index) - '0';String s = mapping[digit];for (char c : s.toCharArray()) {path.append(c);dfs(index + 1);path.deleteCharAt(path.length() - 1);}}

69.15. 三数之和 - 力扣(LeetCode)

双指针

算法讲解:两数之和 三数之和【基础算法精讲 01】_哔哩哔哩_bilibili

降低时间复杂度的原因:利用数组有序的特性,用O(1)的时间得到了O(n)的信息(某个数和任何数相加都小于target或某个数和任何数相加都大于target)

public List<List<Integer>> threeSum(int[] nums) {Arrays.sort(nums);List<List<Integer>> res = new ArrayList<>();for(int i = 0 ; i < nums.length - 2 ; i++){int j = i + 1;int k = nums.length - 1;if(nums[i] > 0){return res;}if(i > 0 && nums[i] == nums[i-1]){continue;}while(j < k){int s = nums[i] + nums[j] +nums[k];if(s > 0){k--;}else if(s < 0){j++;}else{res.add(List.of(nums[i],nums[j],nums[k]));while(j < k && nums[j] == nums[j+1]){j++;}while(j < k && nums[k] == nums[k-1]){k--;}j++;k--;}}}return res;}

70.11. 盛最多水的容器 - 力扣(LeetCode)

双指针

用分析,尝试用O(1)的操作获得O(n)的信息

对于当前盛水的较短者,中间任意一根垂线与其组成的容器,其容量都不会大于当前的容量(高不会超过当前容器的高,宽会比当前容器的宽更小),如果要找到一个容量更大的容器,肯定不会包括这条线。

题解:盛最多水的容器 接雨水_哔哩哔哩_bilibili

public int maxArea(int[] height) {int i = 0 , j = height.length - 1;int area = 0;int ans = 0;while(i < j){int h = Math.min(height[i],height[j]);area = h *(j-i);ans = Math.max(area,ans);if(height[i] < height[j]){i++;}else{j--;}}return ans;}

每次花费O(1)的时间就去掉了一条垂线,时间复杂度O(n),空间复杂度O(1)

相关文章:

hot100(7)

61.31. 下一个排列 - 力扣&#xff08;LeetCode&#xff09; 数组问题&#xff0c;下一个更大的排列 题解&#xff1a;31. 下一个排列题解 - 力扣&#xff08;LeetCode&#xff09; &#xff08;1&#xff09;从后向前找到一个相邻的升序对&#xff08;i,j)&#xff0c;此时…...

DeepSeek辅助学术写作【对比概念】效果如何?

DeepSeek-R1在论文写作细节方面有很多好的应用。我们下面通过具体案例来逐一展示这些功能。 DeepSeek-R1在提问方面&#xff0c;可以简化提示词也能给出精准得答案。我们来一探究竟&#xff01; 对比概念(功能指数:★★★★★) DeepSeek-R1在概念对比方面的功能也非常强大。由…...

基础相对薄弱怎么考研

复习总体规划 明确目标 选择专业和院校&#xff1a;根据你的兴趣、职业规划和自身实力&#xff0c;选择适合自己的专业和院校。可以参考往年的分数线、报录比、复试难度等。了解考试科目&#xff1a;不同专业考试科目不同&#xff0c;一般包括&#xff1a; 公共课&#xff1a…...

kakailio官网推荐的安装流程ubuntu 22.04

https://kamailio.org/docs/tutorials/6.0.x/kamailio-install-guide-git/ # 非必须项 wget -O- https://deb.kamailio.org/kamailiodebkey.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/kamailio.gpg在/etc/apt/sources.list文件追加以下内容 deb [signed-by/usr/sh…...

DeepSeek:全栈开发者视角下的AI革命者

目录​​​​​​​ DeepSeek&#xff1a;全栈开发者视角下的AI革命者 写在前面 一、DeepSeek的诞生与定位 二、DeepSeek技术架构的颠覆性突破 1、解构算力霸权&#xff1a;从MoE架构到内存革命 2、多模态扩展的技术纵深 3、算法范式的升维重构 4、重构AI竞争规则 三、…...

协同探索与导航文献整理

文章目录 1.SOAR:异构无人机协同探索与拍摄以实现快速自主重建2. RACER: 一种使用分散式无人机群进行快速协同探索的方法3. 使用协作式纳米无人机在非结构化环境中进行最小感知探索4.GVP-MREP:通过动态拓扑图上的 Voronoi 分区进行快速且通信高效的多无人机探索5.森林的快速多无…...

C#结合html2canvas生成切割图片并导出到PDF

目录 需求 开发运行环境 实现 生成HTML范例片断 HTML元素转BASE64 BASE64转图片 切割长图片 生成PDF文件 小结 需求 html2canvas 是一个 JavaScript 库&#xff0c;它可以把任意一个网页中的元素&#xff08;包括整个网页&#xff09;绘制到指定的 canvas 中&#xf…...

AI安全最佳实践:AI云原生开发安全评估矩阵(上)

保护生成式 AI&#xff1a;生成式 AI 安全范围矩阵简介 生成式人工智能&#xff08;生成式 AI&#xff09;正在吸引各大企业的关注&#xff0c;并在全球各行各业中重塑客户体验。这一 AI 能力的飞跃&#xff0c;由数十亿参数的大语言模型&#xff08;LLM&#xff09;和Transfo…...

[ Spring ] Spring Boot Mybatis++ 2025

文章目录 StructureMyBatis Controller AbilitiesConfigure Plugins and RepositoriesApply Plugins and Add DependenciesMyBatis Spring PropertiesMyBatis ApplicationMyBatis BeansMyBatis MapperMyBatis Query Builder Structure this blog introduce 3 ways using mybat…...

JAVAweb学习日记(九) MySQL-事务索引

一、事务-介绍 示例代码&#xff1a; 二、事务-四大特性 三、索引-介绍 无索引&#xff1a;全表扫描&#xff08;对应字段逐一比较&#xff09; 有索引&#xff1a;根据索引结构高效获取数据 优缺点&#xff1a; 四、索引-结构 五、索引-操作语法...

企业加密软件(天锐绿盾)

天锐绿盾是一款功能强大的企业加密软件&#xff0c;以下是对其的详细介绍&#xff1a; 一、产品概述 天锐绿盾&#xff08;又名绿盾信息安全管理软件&#xff09;&#xff0c;专注于企业数据防泄密&#xff0c;致力于为企业提供全方位的数据安全保障。其官网为www.drhchina.c…...

Python实现监督学习与无监督学习

在机器学习中,算法被广泛应用于解决实际问题。监督学习与无监督学习是其中两种重要的学习范式。监督学习通过已标注的数据进行训练,目标是学会预测未知数据的标签。而无监督学习不需要数据的标签,它专注于数据的结构和模式,通常用于聚类或降维等任务。 本教程的目标是帮助…...

Python网络自动化运维---批量登录设备

文章目录 目录 文章目录 前言 实验准备 一.批量登录 IP 连续的设备 1.1.1 实验代码 1.1.2 代码分段分解 1.1.3 实验结果验证 二.批量登录 IP 不连续的设备 2.2.1 实验代码 2.2.2 代码分段分解 2.2.3 实验结果验证 前言 在生产环境中&#xff0c;我们通常需要登录多个设备…...

如何抓取酒店列表: 揭开秘密

搜索酒店列表是一种强大的工具&#xff0c;可以从各种在线资源中收集有关住宿、价格和可用性的综合数据。无论您是要比较价格、分析市场趋势&#xff0c;还是要创建个性化的旅行计划&#xff0c;搜索都能让您有效地汇编所需的信息。在本文中&#xff0c;我们将介绍如何搜索酒店…...

day32-文件共享服务ftp与smb

文件共享服务方案有很多&#xff0c;了解即可 ftp&#xff08;简单文件传输服务&#xff09; 提供用户认证机制 可以输入账号密码 python -m SimpleHTTPServer nginx也提供了文件下载的功能 提供用户认证机制 反向代理&#xff0c;负载均衡 web服务器&#xff0c;静态文件…...

快速傅里叶离散变换FFT (更新中)

声明&#xff1a;参考了 y y c yyc yyc 的 blog 和 PPT (from smwc) &#xff0c;以及 w z r wzr wzr 的 blog 。 目录 Part 1 多项式Part 2 FFT概论Part 3 点值与插值Part 4 复数&#xff0c;单位根Part 5 Part 1 多项式 定义&#xff1a;对于有限数列 A 0 A_{0} A0​~ n…...

【从零开始入门unity游戏开发之——C#篇48】C#补充知识点——静态导入、异常捕获和异常筛选器、nameof运算符

考虑到每个人基础可能不一样,且并不是所有人都有同时做2D、3D开发的需求,所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】:主要讲解C#的基础语法,包括变量、数据类型、运算符、流程控制、面向对象等,适合没有编程基础的…...

8.PPT:小李-第二次世界大战【21】

目录 NO123 ​ NO4567 ​ NO8\9\10\11​ 图片→格式→大小对话框→锁定纵横比✔动画→飞入→效果选项&#xff1a;方向/序列→开始→持续时间→延迟时间持续时间&#xff1a;1s延迟&#xff1a;0.5s音频剪切时间&#xff1a;0.5s&#xff1a;00:00.500自动换片时间设置&…...

企业百科和品牌百科创建技巧

很多人比较困惑&#xff0c;创建百科词条需要注意哪些事情&#xff1f;为什么参考提交了权威新闻参考资料还是没有通过&#xff0c;下面小马识途营销顾问就为大家解答疑惑&#xff1a; 1、品牌词以及企业词提交 1&#xff09;如果没有词条&#xff0c;我们可以通过平台提供的急…...

搭建集成开发环境PyCharm

1.下载安装Python&#xff08;建议下载并安装3.9.x&#xff09; https://www.python.org/downloads/windows/ 要注意勾选“Add Python 3.9 to PATH”复选框&#xff0c;表示将Python的路径增加到环境变量中 2.安装集成开发环境Pycharm http://www.jetbrains.com/pycharm/…...

用PCA给高维数据‘瘦身’:从鸢尾花数据集到人脸图像,实战对比降维效果与可视化技巧

用PCA给高维数据‘瘦身’&#xff1a;从鸢尾花数据集到人脸图像&#xff0c;实战对比降维效果与可视化技巧 当面对成百上千维的数据时&#xff0c;我们常会陷入"维度灾难"的困境——计算资源吃紧、模型训练缓慢&#xff0c;更糟的是噪声干扰导致分析结果失真。主成分…...

mnestra:基于ESBuild的极简前端构建工具,速度与体验的完美平衡

1. 项目概述&#xff1a;一个被低估的现代前端构建工具如果你在前端开发领域摸爬滚打超过五年&#xff0c;大概率经历过从 Grunt、Gulp 到 Webpack 的构建工具变迁史。每次工具的迭代&#xff0c;都伴随着配置文件的日益复杂和构建速度的微妙下降。当 Vite 携 ES Module 原生支…...

终极FGO自动化助手:告别枯燥刷本,每天节省3小时游戏时间

终极FGO自动化助手&#xff1a;告别枯燥刷本&#xff0c;每天节省3小时游戏时间 【免费下载链接】FGA Auto-battle app for F/GO Android 项目地址: https://gitcode.com/gh_mirrors/fg/FGA Fate/Grand Automata&#xff08;简称FGA&#xff09;是一款专为Fate/Grand Or…...

防火墙和手动启动都试了?ArcGIS License Server无响应,可能是这两个核心文件在捣鬼

ArcGIS许可服务故障深度解析&#xff1a;当核心文件成为隐形杀手 当你面对ArcGIS License Server无响应的红色报错框&#xff0c;已经尝试了关闭防火墙、调整服务配置、甚至重启服务器等一系列标准操作后&#xff0c;那个令人沮丧的"cannot connect to license server sys…...

设计师速存!Midjourney未公开的风格隐藏开关:--style raw、--s 750、--no texture三者协同作用的神经渲染原理(GPU显存占用下降41%实测)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;设计师速存&#xff01;Midjourney未公开的风格隐藏开关&#xff1a;--style raw、--s 750、--no texture三者协同作用的神经渲染原理&#xff08;GPU显存占用下降41%实测&#xff09; Midjourney v6.1…...

构建个人知识库:从碎片化代码到结构化知识体系

1. 项目概述&#xff1a;从“ClawCode”看个人知识库的构建与价值最近在和一些开发者朋友交流时&#xff0c;发现一个普遍现象&#xff1a;大家电脑里都散落着无数代码片段、配置脚本、临时笔记和项目心得。这些“数字碎片”价值巨大&#xff0c;但往往因为缺乏有效的组织&…...

gwadd:轻量级Git仓库组管理工具,提升多项目开发效率

1. 项目概述&#xff1a;一个被低估的Git仓库管理利器如果你和我一样&#xff0c;日常工作中需要频繁地在多个Git仓库之间穿梭&#xff0c;处理各种依赖、子模块&#xff0c;或者仅仅是同步一堆相关的项目代码&#xff0c;那么你一定对那种重复、繁琐的切换和操作感到头疼。今天…...

Deep Lake:AI数据湖与向量数据库一体化管理实践

1. 项目概述&#xff1a;当数据湖遇上深度学习如果你正在构建一个AI应用&#xff0c;无论是图像识别、自然语言处理还是多模态模型&#xff0c;数据管理绝对是你绕不开的“硬骨头”。数据分散在各个文件夹、云存储、数据库里&#xff0c;格式五花八门&#xff0c;加载速度慢&am…...

016、Git版本控制与协作开发流程

016 Git版本控制与协作开发流程 一个让我熬夜到凌晨三点的.gitignore 去年做一款基于STM32U5的TinyML手势识别项目,团队四个人,代码库从第一天就开始膨胀。第三天晚上,我习惯性git push,然后去睡觉。凌晨三点被手机震醒——同事在群里@我:“你push了个啥?编译不过了。”…...

μSR技术中的双量子Rabi振荡优化与应用

1. 实验背景与核心原理 在量子物理和凝聚态物理研究中&#xff0c;μ子自旋共振&#xff08;μSR&#xff09;技术是一种独特的探测手段。这项技术利用正μ子&#xff08;μ&#xff09;作为微观探针&#xff0c;通过观测其自旋极化行为来研究材料的局部磁环境。当μ子注入样品…...