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

LeetCode 解题思路 11(Hot 100)

在这里插入图片描述

解题思路:

  1. 若相等: 直接返回 true。
  2. 若当前元素大于目标值: 由于列递增,当前列下方所有元素均大于目标值,故排除该列(向左移动)。
  3. 若当前元素小于目标值: 由于行递增,当前行左侧所有元素均小于目标值,故排除该行(向下移动)。

Java代码:

class Solution {public boolean searchMatrix(int[][] matrix, int target) {if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {return false;}int i = 0;int j = matrix[0].length - 1; while (i < matrix.length && j >= 0) {if (matrix[i][j] == target) {return true;} else if (matrix[i][j] > target) {j--; } else {i++;}}return false;}
}

复杂度分析:

  • 时间复杂度: O(m + n)。
  • 空间复杂度: O(1)。

在这里插入图片描述

解题思路:

  1. 双指针: 两个链表头部同时出发,每次移动一步。当一个链表遍历完后,将其指针重置到另一个链表头部继续遍历。
  2. 节点相交: 由于两个链表长度差异会在重置过程中被抵消,最终两个指针必定在相交节点相遇(若存在相交节点)。

Java代码:

public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {if (headA == null || headB == null) return null;ListNode p1 = headA;ListNode p2 = headB;while (p1 != p2) {p1 = (p1 == null) ? headB : p1.next;p2 = (p2 == null) ? headA : p2.next;}return p1;}
}

复杂度分析:

  • 时间复杂度: O(m + n)。其中 m 和 n 分别为两个链表的长度。最坏情况下,两个指针各遍历完两个链表一次。
  • 空间复杂度: O(1)。仅需常数级的额外空间(两个指针 p1 和 p2)。

http://www.mrgr.cn/news/93447.html

相关文章:

  • docker-compose部署mongodb副本集集群
  • AI绘画软件Stable Diffusion详解教程(7):图生图基础篇(改变图像风格)
  • Oracle SQL优化实战要点解析(11)——索引、相关子查询及NL操作(1)
  • vue基本功
  • Manus AI使用指南(从说到做,知行合一)
  • GCC RISCV 后端 -- GCC Passes 注释
  • Tomcat之 配置https协议即SSL证书
  • Ubuntu 安装docker docker-compose
  • ubuntu 20.04下ZEDmini安装使用
  • 4.2 使用说明:手册写作利器VNote的使用
  • 【AIGC系列】6:HunyuanVideo视频生成模型部署和代码分析
  • nuxt2 打包优化使用“compression-webpack-plugin”插件
  • java中小型公司面试预习资料(一):基础篇
  • “深入浅出”系列之Linux篇:(13)socket编程实战+TCP粘包解决方案
  • 数据可视化大屏产品设计方案(附Axure源文件预览)
  • DeepSeek私有化部署5:openEuler 24.03-LTS-SP1安装docker
  • 每日一题----------枚举的注意事项和细节
  • Windows编译环境搭建(MSYS2\MinGW\cmake)
  • “深入浅出”系列之Linux篇:(10)基于C++实现分布式网络通信RPC框架
  • nodejs使用WebSocket实现聊天效果