没有合适的资源?快使用搜索试试~ 我知道了~
首页腾讯精选数据结构与算法50题详解:考研与学习宝典
"《数据结构与算法 腾讯精选练习50 V1.0》是一本面向数据结构与算法学习者的170多页小册子,主要梳理了LeetCode上“腾讯精选练习50题”的精华内容。这本书旨在帮助学生深化理解数据结构和算法的基础知识,尤其适合正在学习相关课程的学生以及准备计算机类研究生入学考试的人士。作者通过自己的经验,将之前在公众号上的打卡图文进行了详尽的整理和优化,涵盖了诸如两数相加、中位数查找、最长回文子串、整数反转、字符串处理、数组操作、链表合并、搜索问题、树和图的遍历、最大子序列和、动态规划等经典题目,以及如二叉树、堆、图论等高级算法的实践应用。每一题都配以简洁明了的解释和高效解法,既适合理论学习,也便于实际操作和面试准备。无论是初学者还是进阶者,都能从中找到提升编程技能和解决问题能力的宝贵资源。"
资源详情
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/12342806/bg10.jpg)
15 / 169
else
right = i;
}
int m1 = left;
int m2 = k - left;
int c1 = Math.Max(m1 == 0 ? int.MinValue : nums1[m1 - 1],
m2 == 0 ? int.MinValue : nums2[m2 - 1]);
if ((m + n)%2 == 1)
return c1;
int c2 = Math.Min(m1 == m ? int.MaxValue : nums1[m1],
m2 == n ? int.MaxValue : nums2[m2]);
return (c1 + c2)*0.5;
}
}
第二种:通过合并为一个有序数组的方式
思路:首先把两个有序数组合并为一个有序数组,然后根据数组长度来确定中位数,如果
数组长度为偶数,那么返回两个中位数的平均值,如果数组长度为奇数,那么返回中位
数。
python 实现
• 执行结果:通过
• 执行用时 :128 ms, 在所有 Python3 提交中击败了 34.35%的用户
• 内存消耗 :12.8 MB, 在所有 Python3 提交中击败了 99.43%的用户
class Solution:
def findMedianSortedArrays(self, nums1, nums2):
m = len(nums1)
n = len(nums2)
nums1.extend(nums2)#
合并
nums1.sort()#
排序
if (m + n) & 1:#
如果是奇数
返回中位数
return nums1[(m + n - 1) >> 1]
![](https://csdnimg.cn/release/download_crawler_static/12342806/bg11.jpg)
16 / 169
else:#
返回两个中位数的平均值
return (nums1[(m + n - 1) >> 1] + nums1[(m + n) >> 1]) / 2
C# 实现
• 状态:通过
• 2085 / 2085 个通过测试用例
• 执行用时: 188 ms, 在所有 C# 提交中击败了 72.14% 的用户
• 内存消耗: 26.9 MB, 在所有 C# 提交中击败了 5.05% 的用户
public class Solution {
public double FindMedianSortedArrays(int[] nums1, int[] nums2) {
int len1 = nums1.Length;
int len2 = nums2.Length;
int len = len1 + len2;
int[] nums = new int[len];
Array.Copy(nums1, nums, len1);
Array.Copy(nums2, 0, nums, len1, len2);
Array.Sort(nums);
if (len%2 == 0)
{
return (nums[len/2] + nums[len/2 - 1])*0.5;
}
return nums[len/2];
}
}
![](https://csdnimg.cn/release/download_crawler_static/12342806/bg12.jpg)
17 / 169
03 最长回文子串
• 题号:5
• 难度:中等
• https://leetcode-cn.com/problems/longest-palindromic-substring/
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd"
输出: "bb"
示例 3:
输入: "a"
输出: "a"
回文是一个正读和反读都相同的字符串,例如,“aba”是回文,而“abc”不是。
第一种:暴力法,列举所有的子串,判断该子串是否为回文。
• 执行结果:超出时间限制
public class Solution
{
public string LongestPalindrome(string s)
![](https://csdnimg.cn/release/download_crawler_static/12342806/bg13.jpg)
18 / 169
{
if (string.IsNullOrEmpty(s))
return string.Empty;
if (s.Length == 1)
return s;
int start = 0;
int end = 0;
int len = int.MinValue;
for (int i = 0; i < s.Length; i++)
{
for (int j = i + 1; j < s.Length; j++)
{
string str = s.Substring(i, j - i + 1);
if (isPalindrome(str) && str.Length > len)
{
len = str.Length;
start = i;
end = j;
}
}
}
return s.Substring(start, end - start + 1);
}
public bool isPalindrome(string s)
{
for (int i = 0, len = s.Length / 2; i < len; i++)
{
if (s[i] != s[s.Length - 1 - i])
return false;
}
return true;
}
}
第二种:动态规划
动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解
子问题,然后从这些子问题的解得到原问题的解。
![](https://csdnimg.cn/release/download_crawler_static/12342806/bg14.jpg)
19 / 169
与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立
的(即下一个子阶段的求解是建立在上一个子阶段的解的基础上,进行进一步的求解)。
若用分治法来解这类问题,则分解得到的子问题数目太多,有些子问题被重复计算了很多
次。如果我们能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,这样就
可以避免大量的重复计算,节省时间。
我们可以用一个表来记录所有已解的子问题的答案。不管该子问题以后是否被用到,只要
它被计算过,就将其结果填入表中。这就是动态规划法的基本思路。
具体的动态规划算法多种多样,但它们具有相同的填表格式。
使用记号 s[l, r] 表示原始字符串的一个子串,l、r 分别是区间的左右边界的索引值,使
用左闭、右闭区间表示左右边界可以取到。
dp[l, r] 表示子串 s[l, r](包括区间左右端点)是否构成回文串,是一个二维布尔型数
组。
• 当子串只包含 1 个字符,它一定是回文子串;
• 当子串包含 2 个以上字符的时候:s[l, r] 是一个回文串,那么这个回文串两边
各往里面收缩一个字符(如果可以的话)的子串 s[l + 1, r - 1] 也一定是回文
串。
故,当 s[l] == s[r] 成立的时候,dp[l, r]的值由 dp[l + 1, r - l] 决定,这里还需要再
多考虑一点点:“原字符串去掉左右边界”的子串的边界情况。
• 当原字符串的元素个数为 3 的时候,如果左右边界相等,那么去掉它们以后,只
剩下 1 个字符,它一定是回文串,故原字符串也一定是回文串;
剩余169页未读,继续阅读
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/cea72f80a0b140fa9c75cb2b2ab9a9d5_lsgo_myp.jpg!1)
青少年编程备考
- 粉丝: 1w+
- 资源: 29
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- 贵州煤矿矿井水分类与处理策略:悬浮物、酸性与非酸性
- 醛固酮增多症肾上腺静脉采样对比:ACTH后LR-CAV的最优评估
- 开源云连接传感器监控平台:农业土壤湿度远程监测
- 母婴用品企业年度生产计划线性规划优化模型:实证与应用
- 井下智能变电站:Rogowski线圈电流检测系统的研发与性能验证
- 霍州矿区煤巷稳定性分析及支护策略
- ARM嵌入式系统远程软件更新方案:基于TFTP协议
- 煤炭选煤中汞分布规律与洗选脱汞效果
- 提升码垛机器人性能:拉格朗日动力学模型与滑模模糊控制的应用
- 增强现实技术提升学前手写教学:设计与开发案例
- 不规则工作面沉陷三角剖分算法提升与应用
- 卡尔曼滤波在瞬变电磁干扰压制中的应用研究
- 煤矿安全能力研究:理论与系统构建
- LonWorks总线技术在斜巷运输车辆定位与跑车防护中的应用
- 神东煤炭集团高效煤粉锅炉系统:节能环保新实践
- Ti/SnO2+Sb2Ox/PbO2电极分形维数与电催化性能研究
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)