Leetcode 0048. Rotate Image
48. Rotate ImageYou are given an n x n 2D matrix representing an image, rotate the image by 90 degrees (clockwise). You have to rotate the image in-place, which means you have to modify the input 2D matrix directly. DO NOT allocate another 2D matrix and do the rotation. Example 1: 12Input: matrix = [[1,2,3],[4,5,6],[7,8,9]]Output: [[7,4,1],[8,5,2],[9,6,3]] Example 2: 12Input: matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]Output: [[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]] ...
Leetcode 0046. Permutations
46. PermutationsGiven an array nums of distinct integers, return all the possible permutations. You can return the answer in any order. Example 1: 12Input: nums = [1,2,3]Output: [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] Example 2: 12Input: nums = [0,1]Output: [[0,1],[1,0]] Example 3: 12Input: nums = [1]Output: [[1]] 题目大意给定一个无重复元素的整数数组 nums,返回该数组所有可能的全排列。全排列是指包含数组所有元素的有序序列,且每个元素仅出现一次,结果顺序可任意。 例如: 输入 nums = [1,2,3],输出 [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]](共 3! = 6 种...
基于多人聊天室系统的实现,学习 setsockopt 函数:从代码到实践
导言在网络通信领域的研究与实践中,套接字选项的配置是网络编程的核心技术环节之一。setsockopt函数作为配置套接字选项的核心接口,其使用机制与应用场景对网络程序性能优化和稳定性保障具有重要意义。本文将结合具体的代码实现,系统探讨setsockopt函数的参数结构、应用方法及典型套接字选项的配置策略。 一、setsockopt 函数的理论基础setsockopt函数定义于sys/socket.h头文件,其函数原型为: 12#include <sys/socket.h>int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen); 各参数的语义解析如下: sockfd:表示目标套接字的文件描述符,作为操作对象的唯一标识 level:指定选项所属的协议层次,其中SOL_SOCKET用于通用套接字选项配置,IPPROTO_TCP专用于 TCP 协议相关设置 optname:具体要配置的选项名称,决定配置行为的类型 optval:指向选项值...
基于多人聊天室系统的实现,详细学习select 函数基础
一、select 函数基础与定时机制在网络编程中,select函数是一种常用的 I/O 多路复用技术,它允许程序同时监控多个文件描述符,等待其中任何一个变为 "就绪" 状态(可读、可写或异常)。select函数的原型如下: 1234#include <sys/select.h>int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); 其中,timeout参数是一个指向struct timeval的指针,用于设置select函数的最大等待时间: 1234struct timeval { long tv_sec; /* 秒 */ long tv_usec; /* 微秒 */}; 这个参数实现了select函数的定时机制,具体分为三种情况: timeout == NULL:无限等待,直到有文件描述符就绪 timeout->...
Leetcode 0045. 跳跃游戏 II
45. 跳跃游戏 II给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向后跳转的最大长度。换句话说,如果你在索引 i 处,你可以跳转到任意 (i + j) 处: 0 <= j <= nums[i] 且 i + j < n 返回到达 n - 1 的最小跳跃次数。测试用例保证可以到达 n - 1。 示例 1: 1234输入: nums = [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。 从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。 示例 2: 12输入: nums = [2,3,0,1,4]输出: 2 解题思路核心思路是贪心算法,通过跟踪 “当前跳跃的最远边界” 和 “下一次跳跃的最远可达位置”,在每一步跳跃时选择最优范围,实现最少跳跃次数: 贪心策略: 用 end 表示当前跳跃能到达的最远边界(初始为 0); 用 max_reach 表示从当前位置到 end 之间的所有位置能跳到的最远位置; 用 s...
Leetcode 0042. 接雨水
42. 接雨水给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 123输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 示例 2: 12输入:height = [4,2,0,3,2,5]输出:9 解题思路核心思路是双指针边界,通过每个柱子能接住的雨水量取决于其左右两侧的最高柱子中较矮的那个(短板效应): 边界定义: 对于位置 i,左侧最高柱子高度为 left_max[i]; 右侧最高柱子高度为 right_max[i]; 位置 i 能接住的雨水量为 min(left_max[i], right_max[i]) - height[i](若结果为正,否则为 0)。 优化实现: 采用双指针法,无需额外存储 left_max 和 right_max 数组,将空间复杂度降至 O (1); 用 left 和 right 指针分别从左右两端向...
Linux:基于 select 多路复用的 C 语言多人聊天室实现
一、项目概述与核心功能本聊天室服务器基于 TCP 协议,通过select多路复用技术,实现单线程高效处理多个连接。其核心功能包括: 稳定连接:利用 TCP 协议确保数据传输的可靠性; 高效处理:借助select系统调用,提升服务器并发处理能力; 多样交互:支持群聊和私聊两种模式; 智能管理:设置 30 秒无活动超时机制,自动清理闲置连接; 日志追踪:记录服务器关键事件与客户端活动,便于监控与调试; 控制台广播:管理员可通过控制台向所有在线客户端发送消息。 二、核心技术点 select多路复用:允许单线程同时处理多个文件描述符(如监听套接字、客户端连接和标准输入),降低多线程编程的复杂度与资源消耗。 链表数据结构:采用双向链表动态管理客户端连接信息,便于节点的添加、删除与遍历操作。 TCP socket 编程:完整实现套接字创建、地址绑定、端口监听和连接接受等网络通信核心操作。 时间处理机制:通过高精度时间戳生成函数,实现超时检测与日志记录功能。 三、代码模块解析3.1 时间戳工具函数123456789101112131415// 获取时间戳字符串char* get_time...
Leetcode 0040. Combination Sum II
40. Combination Sum IIGiven a collection of candidate numbers (candidates) and a target number (target), find all unique combinations in candidates where the candidate numbers sum to target. Each number in candidates may only be used once in the combination. Note: The solution set must not contain duplicate combinations. Example 1: 12345678Input: candidates = [10,1,2,7,6,1,5], target = 8Output: [[1,1,6],[1,2,5],[1,7],[2,6]] Example 2: 123456Input: candidates = [2,5,2,1,2], target = 5Output:...
基于 TCP 协议的双向通信程序实现与解析
一、整体工作流程本代码实现的内网聊天系统采用经典的客户端 - 服务器(C/S)架构模型。系统运行过程中,服务器端与客户端分别遵循以下工作流程: 服务器端的初始化阶段,依次执行 socket 创建、端口绑定及监听状态设置等操作。随后进入循环监听模式,默认设置 5 秒超时机制等待客户端连接请求。当客户端成功连接后,服务器与客户端进入双向通信状态,双方可通过标准输入输出进行消息交互。客户端断开连接后,服务器将关闭当前连接通道,重新进入待连接状态,以处理后续客户端请求。 客户端在初始化时,通过创建 socket 实例并连接至服务器指定端口建立通信链路。连接成功后,客户端启动消息交互循环,实现用户输入消息的发送与服务器响应消息的接收功能。当满足预设退出条件时,客户端将主动断开与服务器的连接,并安全退出程序。 系统基于 TCP 协议通过 socket 接口建立连接,运用 select 函数实现 I/O 多路复用机制,同时监听标准输入及网络数据接收事件,确保通信过程的高效性与可靠性。各功能模块协同配合,共同完成消息收发、时间戳记录及会话管理等核心功能。 二、关键函数作用2....
Leetcode 0039. Combination Sum
39. Combination SumGiven an array of distinct integers candidates and a target integer target, return a list of all unique combinations of candidates where the chosen numbers sum to target. You may return the combinations in any order. The same number may be chosen from candidates an unlimited number of times. Two combinations are unique if the frequency of at least one of the chosen numbers is different. The test cases are generated such that the number of unique combinations that sum up to ...
Leetcode 0035. Search Insert Position
35. Search Insert Position题目Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order. You may assume no duplicates in the array. Example 1: 12Input: [1,3,5,6], 5Output: 2 Example 2: 12Input: [1,3,5,6], 2Output: 1 Example 3: 12Input: [1,3,5,6], 7Output: 4 Example 4: 12Input: [1,3,5,6], 0Output: 0 题目大意给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 你可以假设数组中无重复元素。 核心思路问题本质上是要找到第一个大于等...
基于 UDP 协议的双向通信程序实现与解析
引言用户数据报协议(UDP)作为 TCP/IP 协议簇中的核心协议之一,以其无连接、低开销的特性,在实时通信、物联网数据传输等场景中发挥着重要作用。与 TCP 协议的面向连接、可靠传输不同,UDP 协议提供的是一种尽最大努力交付的服务,不保证数据的有序到达和不丢失,这使得其在对实时性要求较高而对可靠性要求相对较低的场景中具有显著优势。 本文将对一套基于 UDP 协议实现的双向通信程序进行深入解析,包括客户端与服务器端的代码结构、关键函数调用、程序运行逻辑以及实际通信案例分析,旨在揭示 UDP 协议在实际编程中的应用方式与技术细节。 一、程序整体架构与设计思路本次分析的程序采用 C 语言编写,基于 Linux 系统的套接字(socket)API 实现,包含客户端和服务器端两个独立的程序模块。两套程序均采用了 I/O 多路复用技术(select 函数)实现标准输入和网络套接字的同时监听,从而实现双向通信功能。 程序的核心设计思路在于: 利用 UDP 协议的无连接特性,无需建立连接即可直接发送数据 通过 select 函数实现 I/O 多路复用,同时监...
Leetcode 0034. Find First and Last Position of Element in Sorted Array
34. Find First and Last Position of Element in Sorted Array题目Given an array of integers nums sorted in ascending order, find the starting and ending position of a given target value. Your algorithm's runtime complexity must be in the order of O(log n). If the target is not found in the array, return [-1, -1]. Example 1: Input: nums = [5,7,7,8,8,10], target = 8 Output: [3,4] Example 2: Input: nums = [5,7,7,8,8,10], target = 6 Output: [-1,-1] 查找第一个出现的位置: 当找到目标值时,不立即返回,而是继续向左查找(right ...
Leetcode 0033. Search in Rotated Sorted Array
33. Search in Rotated Sorted Array题目Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e., [0,1,2,4,5,6,7] might become [4,5,6,7,0,1,2]). You are given a target value to search. If found in the array return its index, otherwise return -1. You may assume no duplicate exists in the array. Your algorithm's runtime complexity must be in the order of O(log n). Example 1: Input: nums = [4,5,6,7,0,1,2], target = 0 Output: 4 Example 2: Input: nums =...
Leetcode 0028. Find the Index of the First Occurrence in a String
28. Find the Index of the First Occurrence in a StringGiven two strings needle and haystack, return the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack. Example 1: 1234Input: haystack = "sadbutsad", needle = "sad"Output: 0Explanation: "sad" occurs at index 0 and 6.The first occurrence is at index 0, so we return 0. Example 2: 123Input: haystack = "leetcode", needle = "leeto"Output: -1Explanation: &...
TCP 泛洪攻击
一、TCP 协议基础与 Socket 编程框架TCP 作为面向连接的可靠传输层协议,借助三次握手、滑动窗口、超时重传和拥塞控制等机制,保障数据通信的可靠性。在 Linux 系统中,Socket 接口将 TCP 协议细节进行封装,为开发者提供标准的通信接口。 TCP Socket 通信主要分为七个阶段:socket 创建、地址绑定、监听、连接请求处理、数据传输和连接释放 ,每一个系统调用都严格遵循 TCP 状态机规则,确保通信流程的有序进行。 二、泛洪攻击的原理与 TCP 协议脆弱性分析2.1 泛洪攻击的定义与分类泛洪攻击(Flood Attack)属于拒绝服务(DoS)攻击,通过向目标系统发送超量流量或请求,耗尽其资源,导致无法为合法用户服务。在 TCP 协议场景下,攻击者利用协议特性构造恶意请求,破坏服务可用性。 TCP 泛洪攻击主要分为两类: 连接型泛洪攻击:以SYN Flood为代表,攻击者伪造虚假源 IP 的 SYN 请求,使目标服务器在等待 ACK 响应时占用大量半连接资源,耗尽连接队列,拒绝正常用户请求。 数据型泛洪攻击:攻击者建立合法连接后,发送大量无效数据,如...
Leetcode 0027. Remove Element
27. Remove Element给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。 假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作: 更改 nums 数组,使 nums 的前 k 个元素包含不等于 val 的元素。nums 的其余元素和 nums 的大小并不重要。 返回 k。 用户评测: 评测机将使用以下代码测试您的解决方案: 123456789101112int[] nums = [...]; // 输入数组int val = ...; // 要移除的值int[] expectedNums = [...]; // 长度正确的预期答案。 // 它以不等于 val 的值排序。int k = removeElement(nums, val); // 调用你的实现assert k == expectedNums.length;sort(nums, 0, k); // 排序 n...
《Linux C 语言 TCP Socket 编程详解》学习笔记
一、Socket 编程基础1.1 Socket 概述Socket 作为网络编程接口,构建了异构主机间进程通信的基础框架体系。在 Linux C 开发环境中,其作为网络通信实现的核心技术,通过标准化接口对底层协议进行封装,实现了跨平台的编程能力。从抽象层面来看,Socket 可类比为网络通信中的虚拟通信管道,不同主机间的进程借助这些管道进行数据交互,并遵循统一的通信规则,从而确保异构系统间的兼容性与通信稳定性。 1.2 TCP 与 UDP 协议特性比较传输层协议栈的核心由 TCP 和 UDP 协议构成,二者在连接管理机制、数据传输可靠性以及通信模式等方面存在显著差异: TCP 协议:作为基于字节流的面向连接协议,TCP 通过三次握手机制建立可靠连接,并采用确认应答机制与滑动窗口算法,保障数据传输的完整性与有序性。该协议适用于文件传输、网页浏览等对数据准确性要求严苛的应用场景。 UDP 协议:以数据报为基本传输单元的无连接协议,UDP 不具备数据重传与流量控制机制,因而具有低延迟特性。这种特性使其在视频直播、在线游戏等允许少量数据丢失的实时性场景中得到广泛应用。 二、TCP So...
Leetcode 0026. Remove Duplicates from Sorted Array
26. Remove Duplicates from Sorted Array给你一个 非严格递增排列 的数组 nums ,请你** 原地** 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过: 更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。 返回 k 。 判题标准: 系统会用下面的代码来测试你的题解: 123456789int[] nums = [...]; // 输入数组int[] expectedNums = [...]; // 长度正确的期望答案int k = removeDuplicates(nums); // 调用assert k == expectedNums.length;for (int i = 0; i < k; i++) { assert num...
Leetcode 0025.reverse-nodes-in-k-group
25. K 个一组翻转链表给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。 k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。 示例 1: 12输入:head = [1,2,3,4,5], k = 2输出:[2,1,4,3,5] 示例 2: 12输入:head = [1,2,3,4,5], k = 3输出:[3,2,1,4,5] 解题思路:「K 个一组翻转链表」的核心思路是: 分组遍历:每次取 K 个节点作为一组,若不足 K 个则停止。 翻转每组:对当前 K 个节点进行翻转。 连接各组:将翻转后的组与前一组连接,更新指针继续处理下一组。 具体步骤: 用 dummy 虚拟头节点简化边界处理(避免头节点特殊逻辑)。 用 pre 记录上一组的尾节点(翻转后作为连接点)。 用 end 遍历并检查当前组是否有 K 个节点。 翻转当前组后,重新连接 pre 与翻转后的组,并更新 pre 和 end。 1234567891...
基于协议分析与抓包验证的 HTTP/HTTPS 通信机制研究
导言在网络通信领域,HTTP 协议作为客户端与服务器交互的基石,其运行机制对网络应用的正常运转起着至关重要的作用。本文从协议规范解析出发,结合 Wireshark 抓包分析技术,系统研究 HTTP 协议的报文结构、请求方法、状态码体系,并深入探讨 HTTPS 加密通信的核心原理,为网络通信研究与应用开发提供理论支撑与实践参考。 一、HTTP 协议报文结构解析1.1 请求报文构成 请求行:遵循 请求方法 + 请求资源路径 + HTTP协议版本 的格式。例如,GET / HTTP/1.1 表示通过 GET 方法请求根路径资源,采用 HTTP/1.1 协议版本。 请求头部:以键值对形式传递元数据。其中,Host字段指定目标服务器域名;User-Agent标识客户端应用;Accept与Accept-Encoding分别定义可接受的内容类型及压缩编码格式。 请求正文:主要存在于POST等数据提交请求中,用于承载具体业务数据,GET请求通常无正文内容。 1.2 响应报文结构 状态行:采用 HTTP协议版本 + 状态码 + 状态码描述 的格式。例如,HTT...
Leetcode 0024. Swap Nodes in Pairs
24. Swap Nodes in PairsGiven a linked list, swap every two adjacent nodes and return its head. You must solve the problem without modifying the values in the list's nodes (i.e., only nodes themselves may be changed.) Example 1: Input: head = [1,2,3,4] Output: [2,1,4,3] Explanation: Example 2: Input: head = []$ Output: [] Example 3: Input: head = [1] Output: [1] Example 4: Input: head = [1,2,3] Output: [2,1,3] 题目大意给定一个链表,要求两两交换相邻节点(如 1→2→3→4 变为 2→1→4→3),且只能通过调...
Leetcode 0023.merge-k-sorted-lists
23. 合并 K 个升序链表给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 示例 1: 12345678910输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[ 1->4->5, 1->3->4, 2->6]将它们合并到一个有序链表中得到。1->1->2->3->4->4->5->6 示例 2: 12输入:lists = []输出:[] 示例 3: 12输入:lists = [[]]输出:[] 题目大意多个有序链表的合并,使用归并排序整理有序链表,更优秀的思考是采用优先级队列(小根堆)来排序。归并可以看21题。 解题思路解法一:分治法(两两合并)思路核心借鉴「归并排序」的分治思想,将 K 个链表逐步拆分为成对的子问题,合并后再递归 / 迭代合并结果,减少重复比较次数。 步骤拆解边界处理:若 lists 为空,直接返回 nullptr; 迭代合并: 初始时...
URL:网络资源的精准定位机制
导言在计算机网络的复杂生态系统中,统一资源定位符(Uniform Resource Locator, URL)作为核心基础设施,在网络资源寻址与访问控制中发挥着至关重要的作用。这一标准化的字符序列,依据严格的语法规范,将资源的传输协议、物理位置及访问参数进行系统性编码。其模块化设计不仅确保了资源检索的高效性,更保证了定位的准确性。本文将从协议规范、地址标识、端口分配、路径索引、参数传递及锚点定位六个维度,对 URL 的构成要素及其运行机制展开深入剖析。以https://hespethorn.github.io/为例,其完整结构可解构为传输协议、域名标识、默认端口(隐式省略)、资源路径等核心组件,清晰展现了 URL 对网络资源的精准定位逻辑。 一、协议规范:网络通信的基础框架网络协议作为 URL 的逻辑起点,定义了客户端与服务器之间数据传输的规则体系。不同协议在传输模式、数据格式及安全机制等方面存在显著差异,主要包括以下类别: 1. 超文本传输协议(Hypertext Transfer Protocol, HTTP)作为基于请求 - 响应架构的应用层协议,HTTP 在 Web 资源...
Leetcode 0022.GenerateParentheses
22. Generate Parentheses题目Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses. For example, given n = 3, a solution set is: [ "((()))", "(()())", "(())()", "()(())", "()()()" ] 题目大意给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。 解题思路 这道题乍一看需要判断括号是否匹配的问题,如果真的判断了,那时间复杂度就到 O(n * 2^n)了,虽然也可以 AC,但是时间复杂度巨高。 这道题实际上不需要判断括号是否匹配的问题。因为在 DFS 回溯的过程中,会让 ( 和 ) 成对的匹配上的。 123456789101112131415161...

