当前位置: 首页 > 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/…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...