工作中的数据结构与算法
数据结构与算法分析是计算机系的专业基础课程,它是编程是核心。在实际工作中,不管是自己码代码还是阅读维护别人的代码,都不可避免地会遇到各种各样的数据结构和算法。本专栏既是笔者根据学习到的知识,结合项目中的经验,对数据结构和算法的提炼、总结和应用。
guotianqing
这个作者很懒,什么都没留下…
展开
-
滑动窗口简介及应用
简介了解过TCP协议的同学应该都知道滑动窗口的概念。TCP协议中,数据的发送方和接收方都会使用滑动窗口来控制数据的收发。它有以下优点:避免等待流量控制效率高滑动窗口的使用避免了数据重复校验,在字符串匹配等场合有多应用。实现一个窗口由两个标志位决定:左指针指向窗口的左边界右指针指向窗口的右边界在移动时,按以下流程:固定左边界右边界移动当满足条件时,移动左边界例如在TCP的发送端,假设窗口长度为4,则:固定左指针0右边界为3接收到无遗漏的ack后,移动左边原创 2020-08-24 13:49:30 · 3570 阅读 · 0 评论 -
c++反转字符串
简述输入一个字符串,输出一个反转后的字符串。这个问题比较简单,解题思路也很多:使用std::reverse()函数从末尾开始读取原字符串,将其放入一个新建的字符串中遍历字符串,首尾交换位置,奇数位的中间元素不用交换双指针法,即使用两个指针,一个指向开头,一个指向结尾,只要开头小于结尾,就把这两个位置的元素互换递归法,即递归字符串的开始位置和结尾位置元素,两两互换第一种不用说,项目里用它就对了。第二种空间复杂度为O(n),实现简单。这里主要讨论后三种。遍历互换直接上代码:void原创 2020-07-31 16:49:24 · 2676 阅读 · 0 评论 -
最长公共前缀
问题描述编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。例子:输入: ["flower","flow","flight"]输出: "fl"输入: ["dog","racecar","car"]输出: ""解释: 输入不存在公共前缀。输入: ["f"]输出: &原创 2019-02-27 22:30:42 · 188 阅读 · 0 评论 -
有效的括号
问题给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例:输入: "()"输出: true输入: "(]"输出: false输入: "([)]"输出: false输入: "{[]}"输出: true...原创 2019-03-02 19:32:58 · 233 阅读 · 0 评论 -
最长回文子串
问题给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例2:输入: "cbbd"输出: "bb"分析回文是一个正读和反读都相同的字符串,例如,“aba” 是回文,而 “abc” 不是,“ab”也不是,但“a”是。通常来讲,有多种方法可以解...原创 2019-02-18 22:24:00 · 174 阅读 · 0 评论 -
寻找两个有序数组的中位数
问题本问题来自leetcode。给定两个大小为 m 和 n 的有序数组 A 和 B。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。示例:A = [1, 3]B = [2]则中位数是 2.0A = [1, 2]B = [3, 4]则中位数是 (2 + 3)/2 = 2.5...原创 2019-02-17 13:13:06 · 8686 阅读 · 0 评论