【Leecode 随笔】

在这里插入图片描述

文章目录

    • 题目一:盛最多水的容器
      • 题目描述:
      • 题目分析:
      • 解题思路:
      • 示例代码:
      • 深入剖析:
    • 题目二:最长无重复字符的子串
      • 题目描述:
      • 题目分析:
      • 解题思路:
      • 示例代码:
      • 深入剖析:
    • 题目三:合并区间
      • 题目描述:
      • 题目分析:
      • 解题思路:
      • 示例代码:
      • 深入剖析:

🌈你好呀!我是 山顶风景独好
🎈欢迎踏入我的博客世界,能与您在此邂逅,真是缘分使然!😊
🌸愿您在此停留的每一刻,都沐浴在轻松愉悦的氛围中。
📖这里不仅有丰富的知识和趣味横生的内容等您来探索,更是一个自由交流的平台,期待您留下独特的思考与见解。🌟
🚀让我们一起踏上这段探索与成长的旅程,携手挖掘更多可能,共同进步!💪✨

题目一:盛最多水的容器

题目描述:

给定 n 个非负整数 a1,a2,…,an,每个数代表一个坐标点 (i, ai) 。在坐标内画 n 条垂直线,使得 i 垂直线的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴构成的容器可以容纳最多的水。

题目分析:

这是一个典型的双指针问题。我们可以使用两个指针分别指向数组的首尾,然后计算当前两个指针所构成的容器的面积。接着,我们移动指向较短线段的指针(因为容器的高度由较短的线段决定,移动较长线段的指针无法增加容器的高度,而只会减少容器的宽度),直到两个指针相遇。

解题思路:

初始化两个指针,一个指向数组的开始,另一个指向数组的末尾。
计算当前两个指针所构成的容器的面积,并更新最大面积。
移动指向较短线段的指针。
重复步骤2和3,直到两个指针相遇。
返回最大面积。

示例代码:

#include <stdio.h>  // 函数声明  
int maxArea(int* height, int heightSize);  int main() {  int height[] = {1,8,6,2,5,4,8,3,7};  int heightSize = sizeof(height) / sizeof(height[0]);  int result = maxArea(height, heightSize);  printf("Maximum area: %d\n", result);  return 0;  
}  // 计算最大容器面积的函数实现  
int maxArea(int* height, int heightSize) {  int max_area = 0;  int left = 0;  int right = heightSize - 1;  while (left < right) {  // 计算当前容器的面积  int current_area = (right - left) * ((height[left] < height[right]) ? height[left] : height[right]);  // 更新最大面积  if (current_area > max_area) {  max_area = current_area;  }  // 移动指向较短线段的指针  if (height[left] < height[right]) {  left++;  } else {  right--;  }  }  return max_area;  
}

深入剖析:

该算法的时间复杂度为O(n),因为我们只遍历了数组一次。空间复杂度为O(1),因为我们只使用了常数级别的额外空间。这种双指针的技巧在处理类似问题时非常有用,特别是当问题涉及到数组或链表的两端时。

题目二:最长无重复字符的子串

题目描述:

给定一个字符串,找出其中没有重复字符的最长子串的长度。

题目分析:

这是一个滑动窗口问题。我们可以使用两个指针来定义一个窗口,窗口内的字符都是唯一的。当遇到重复字符时,我们移动左指针来缩小窗口,直到窗口内没有重复字符为止。同时,我们需要一个哈希表来记录每个字符在窗口中的位置,以便在O(1)时间内判断字符是否重复。

解题思路:

初始化两个指针(left和right)和一个哈希表(用于记录字符的位置)。
使用right指针扩展窗口,直到遇到重复字符。
当遇到重复字符时,移动left指针缩小窗口,直到窗口内没有重复字符。
在每次移动窗口后,更新最大长度。
重复步骤2-4,直到right指针到达字符串的末尾。
返回最大长度。

示例代码:

#include <stdio.h>  
#include <string.h>  // 函数声明  
int lengthOfLongestSubstring(char * s);  int main() {  char s[] = "abcabcbb";  int result = lengthOfLongestSubstring(s);  printf("Length of longest substring without repeating characters: %d\n", result);  return 0;  
}  // 计算最长无重复字符子串长度的函数实现  
int lengthOfLongestSubstring(char * s) {  int n = strlen(s);  if (n == 0) {  return 0;  }  int max_len = 0;  int left = 0;  int right = 0;  int char_map[256] = { -1 }; // 假设输入字符为ASCII码  while (right < n) {  if (char_map[s[right]] != -1) {  // 遇到重复字符,移动左指针  left = (char_map[s[right]] + 1 > left) ? char_map[s[right]] + 1 : left;  }  // 更新字符的位置  char_map[s[right]] = right;  // 更新最大长度  max_len = (right - left + 1 > max_len) ? right - left + 1 : max_len;  // 移动右指针  right++;  }  return max_len;  
}

深入剖析:

该算法的时间复杂度为O(n),因为我们只遍历了字符串一次。空间复杂度为O(1)(如果考虑哈希表的大小为常数,因为ASCII码字符集是有限的),但实际上哈希表的大小取决于字符集的大小,对于Unicode字符集,空间复杂度会稍大一些。滑动窗口技巧在处理子串、子数组相关问题时非常有效。

题目三:合并区间

题目描述:

给出一个区间的集合,请合并所有重叠的部分。

题目分析:

这是一个排序和合并问题。首先,我们需要对区间按照起始位置进行排序。然后,我们遍历排序后的区间列表,使用一个变量来跟踪当前的合并区间。如果下一个区间的起始位置小于或等于当前合并区间的结束位置,则将它们合并;否则,将当前合并区间添加到结果列表中,并更新合并区间为下一个区间。

解题思路:

对区间按照起始位置进行排序。
初始化一个空的结果列表和一个变量来跟踪当前的合并区间。
遍历排序后的区间列表:
如果当前区间与合并区间重叠,则合并它们。
否则,将合并区间添加到结果列表中,并更新合并区间为当前区间。
将最后一个合并区间添加到结果列表中。
返回结果列表。

示例代码:

#include <stdio.h>  
#include <stdlib.h>  // 区间结构体定义  
typedef struct {  int start;  int end;  
} Interval;  // 比较函数,用于qsort排序  
int compare(const void *a, const void *b) {  Interval *intervalA = (Interval *)a;  Interval *intervalB = (Interval *)b;  return intervalA->start - intervalB->start;  
}  // 合并区间的函数声明  
Interval* merge(Interval* intervals, int intervalsSize, int* returnSize);  int main() {  Interval intervals[] = {{1, 3}, {2, 6}, {8, 10}, {15, 18}};  int intervalsSize = sizeof(intervals) / sizeof(intervals[0]);  int returnSize = 0;  Interval* result = merge(intervals, intervalsSize, &returnSize);  printf("Merged intervals:\n");  for (int i = 0; i < returnSize; i++) {  printf("[%d, %d] ", result[i].start, result[i].end);  }  printf("\n");  // 释放动态分配的内存  free(result);  return 0;  
}  // 合并区间的函数实现  
Interval* merge(Interval* intervals, int intervalsSize, int* returnSize) {  if (intervalsSize == 0) {  *returnSize = 0;  return NULL;  }  // 按照起始位置排序区间  qsort(intervals, intervalsSize, sizeof(Interval), compare);  // 动态分配结果数组的内存  Interval* merged = (Interval*)malloc(intervalsSize * sizeof(Interval));  *returnSize = 0;  // 初始化当前合并区间  Interval current = intervals[0];  for (int i = 1; i < intervalsSize; i++) {  if (intervals[i].start <= current.end) {  // 当前区间与合并区间重叠,合并它们  current.end = (intervals[i].end > current.end) ? intervals[i].end : current.end;  } else {  // 当前区间与合并区间不重叠,将合并区间添加到结果列表中,并更新合并区间  merged[*returnSize] = current;  (*returnSize)++;  current = intervals[i];  }  }  // 添加最后一个合并区间到结果列表中  merged[*returnSize] = current;  (*returnSize)++;  return merged;  
}

深入剖析:

该算法的时间复杂度为O(n log n),其中n是区间的数量,因为我们需要对区间进行排序。空间复杂度为O(n),因为我们需要动态分配一个与区间数量相等大小的结果数组。合并区间的技巧在处理类似问题时非常有用,特别是当问题涉及到重叠区间的合并、求并集等操作时。


✨ 这就是今天要分享给大家的全部内容了,我们下期再见!😊
🏠 我在CSDN等你哦!我的主页😍

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/89573.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/89573.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Springboot项目应用PageInfo分页问题失效

使用github的pagehelper分页依赖<!-- 分页控件 --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.3.0</version><scope>compile</scope></dependency&…

【无标题】标准模型粒子行为与11维拓扑量子色动力学模型严格对应的全面论述

标准模型粒子行为与11维拓扑量子色动力学模型严格对应的全面论述标准模型粒子与拓扑结构的严格对应 mermaid graph LRsubgraph 标准模型粒子A[费米子] --> A1[夸克]A --> A2[轻子]B[玻色子] --> B1[规范玻色子]B --> B2[希格斯]endsubgraph 11维拓扑模型C[实体顶点…

SQL一些关于存储过程和使用的总结

存储过程&#xff1a;数据库里的 "定制工具箱"存储过程就像一个装满工具的箱子&#xff0c;你需要什么功能&#xff0c;就调用对应的工具。它是用 SQL 语句写好的一段程序&#xff0c;存储在数据库里&#xff0c;随时可以调用。创建存储过程 就像在工具箱里放新工具。…

springCloud -- 微服务01

目录 一、认识微服务 1.单体架构 2.微服务 3.SpringCloud 二、微服务拆分 1.服务拆分原则 2.服务调用 3. RestTemplate 三、服务注册和发现 1. 注册中心原理 2. 服务发现 2.1 服务注册 2.2 服务发现 四、OpenFeign 一、认识微服务 1.单体架构 单体架构就是整个项目中所有功能…

Deep Multi-scale Convolutional Neural Network for Dynamic Scene Deblurring 论文阅读

用于动态场景去模糊的深度多尺度卷积神经网络 摘要 针对一般动态场景的非均匀盲去模糊是一个具有挑战性的计算机视觉问题&#xff0c;因为模糊不仅来源于多个物体运动&#xff0c;还来源于相机抖动和场景深度变化。为了去除这些复杂的运动模糊&#xff0c;传统的基于能量优化的…

PDF 拆分合并PDFSam:开源免费 多文件合并 + 按页码拆分 本地处理

各位打工人和学生党们&#xff0c;你知道吗&#xff0c;处理PDF文件简直是咱们的日常噩梦啊&#xff0c;尤其是遇到要合并好几个文件&#xff0c;或者从中抠几页出来的时候&#xff0c;简直头大如斗&#xff01;今天给你们安利一个神仙工具&#xff0c;PDFSam&#xff0c;听我的…

AI产品经理面试宝典第32天:AI+工业场景落地核心问题与应答策略

一、AI+工业落地价值怎么答? 面试官:AI在工业领域能创造哪些核心价值?请用具体案例说明 你的回答: AI在工业领域创造价值的底层逻辑是"数据闭环"。以阿里云ET工业大脑为例,通过采集生产线3000+传感器数据,构建出影响良品率的60个关键变量模型。当数据流经AI…

【09】MFC入门到精通——MFC 属性页对话框的 CPropertyPage类 和 CPropertySheet 类

文章目录九、属性页对话框的类CPropertyPage类 和 CPropertySheet 类。9.1 CPropertyPage 类&#xff08;1&#xff09;构造函数&#xff08;2&#xff09;CancelToClose()函数&#xff08;3&#xff09;SetModified()函数&#xff08;4&#xff09;可重载函数9.2 CPropertyShe…

Python学习笔记4

时间:2025.7.18学习内容&#xff1a;【语法基础】if判断、比较运算符与逻辑运算符一、if判断if判断基本格式&#xff1a;if要判断的条件&#xff0c;条件成立时要做的事情注意&#xff1a;input内默认存储的是字符串age17 if age<18:print(未成年不能上网) scoreinput(你的成…

20250718-2-Kubernetes 应用程序生命周期管理-Pod对象:基本概念(豌豆荚)_笔记

二、Kubernetes应用程序生命周期管理&#xfeff;1. 课程内容概述主要内容&#xff1a;Pod资源共享实现机制管理命令应用自修复&#xff08;重启策略健康检查&#xff09;环境变量Init container静态Pod2. Pod对象介绍&#xfeff;1&#xff09;Pod基本概念&#xfeff;&#x…

为Notepad++插上JSON格式化的翅膀

文章目录概要安装步骤效果展示概要 JSMinNPP.dll 是一个 Notepad 插件&#xff0c;用于压缩 JavaScript 代码和格式化JSON字符床。以下是安装和使用的详细步骤&#xff1a; 安装步骤 下载 JSMinNPP.dll 插件 https://pan.quark.cn/s/73dd0ac225be 放置 DLL 文件 打开 Notepa…

STM32-第七节-TIM定时器-3(输入捕获)

一、简介&#xff1a;1.名称&#xff1a;IC&#xff0c;输入捕获2.电路&#xff1a;如图为通用定时器框图&#xff0c;下半部分的左半模块&#xff0c;与输出比较部分共用捕获/比较寄存器与引脚。3.功能&#xff1a;当通道输入引脚出现电平跳变时&#xff0c;当前CNT的值&#…

Console 纳管 Elasticsearch 9(二):日志监控

前面介绍过 INFINI Console 纳管 Elasticsearch 9&#xff08;一&#xff09;&#xff0c;进行指标监控、数据管理、DSL 语句执行&#xff0c;但日志监控功能需要结合 Agent 才能使用。现在来实现一下&#xff1a; Agent 需要和 ES 部署到同一机器上&#xff0c;这里是在我本地…

实训十——路由器与TCP/IP模型

补充拓扑图&#xff08;交换机串联通信&#xff09;电脑A——交换机S1——交换机S2——电脑B问&#xff1a;A和B如何通信&#xff1f;首先A会将通信的数据封装好&#xff0c;将源端口、目标端口&#xff0c;源地址、目标地址&#xff0c;源MAC、目标MAC封装起来&#xff0c;但是…

【Android】ViewBinding(视图绑定)

一、什么是ViewBindingViewBinding是Android Studio 3.6推出的新特性&#xff0c;旨在替代findViewById(内部实现还是使用findViewById)。通过ViewBinding&#xff0c;可以更轻松地编写可与视图交互的代码。在模块中启用ViewBinding之后&#xff0c;系统会为该模块中的每个 XML…

泛型与类型安全深度解析及响应式API实战

一、泛型通配符&#xff1a;灵活与安全的平衡术 在Java动物收容所系统中&#xff0c;我们常需要处理不同动物类型的集合。通过泛型通配符&#xff0c;可以构建更灵活的API&#xff1a; class Shelter<T extends Animal> {private List<T> animals new ArrayList&l…

Cookie 与 Session概述

在 Web 开发中&#xff0c;会话跟踪是一个核心问题。HTTP 协议是无状态的&#xff0c;这意味着服务器无法直接记住客户端的状态。而 Cookie 和 Session 技术的出现&#xff0c;正是为了解决这一难题。一、Cookie概述Cookie&#xff0c;翻译成中文是小甜点、小饼干的意思。在 HT…

阿里云alicloud liunux3-安装docker

你这个错误&#xff1a;Curl error (35): SSL connect error for https://download.docker.com/linux/centos/8/x86_64/stable/... Error: Failed to download metadata for repo docker-ce-stable: Yum repo downloading error说明你的机器访问 download.docker.com 的 HTTPS …

【世纪龙科技】汽车故障诊断与排除仿真教学软件

在汽车产业智能化、电动化转型加速的今天&#xff0c;汽车维修行业对技术人才的要求已从传统经验型向“理论实践数字化”复合型转变。然而&#xff0c;实车实训成本高、安全隐患大、教学场景受限等问题&#xff0c;始终制约着职业教育的高质量发展。江苏世纪龙科技有限公司立足…

柴油机活塞cad【4张】三维图+设计说明书

1015柴油机活塞结构设计及温度场分析 摘 要 随着科研的进步&#xff0c;内燃机技术得到了快速的发展&#xff0c;低排放高效率的内燃机的发展成为内燃机发展的主要趋势&#xff0c;活塞作为内燃机的主要组成部件&#xff0c;在内燃机中扮演着至关重要的作用。活塞在内燃机中始终…