c++刷题题单

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C ++ 刷题题单
1.两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。

示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
这道题目可以用哈希表来解决,具体思路是遍历一次数组,将数组中的元素以及它们的下标存入哈希表中。

然后再遍历一次数组,对于每个元素,从哈希表中查找是否存在一个元素与当前元素相加等于目标值,如果存在,则返回它们的下标。

2.三数之和
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。

示例:
给定 nums = [-1, 0, 1, 2 -1, -4]
满足的三元组为: [0, -1, 2], [1, 2, -1]
这道题目可以用三重循环嵌套枚举的方法来解决,对于每个元素,枚举它的前两个位置,判断是否存在三个数之和为零的情况。

如果存在,则将这三个数加入结果集中。

需要注意的是要去重,即判断当前三元组是否已经存在于结果集中。

3.最长回文子串
给定一个字符串s,找到s 中最长的回文子串。

你可以假设s 的最大长度为 1000。

示例:
给定 s = "babad"
返回 "bab"
这道题目可以用动态规划的方法来解决。

定义一个二维数组dp,其中dp[i][j] 表示 s[i...j] 是否为回文串。

对于每个位置 i,从 i+1 到 j 遍历,如果 s[i] 和 s[j] 相等,并且 dp[i+1][j-1] 为真(即 s[i+1...j-1] 是回文串),则 dp[i][j] 为真。

最后返回 dp[0][n-1],其中 n 是字符串 s 的长度。

在实现时需要注意边界条件的处理。

4.二叉树的最大深度
给定一个二叉树,找出它的最大深度。

示例:
给定二叉树 [3,9,20,null,null,15,7]
返回它的最大深度为 3 。

这道题目可以使用递归的方法来解决。

定义一个函数,传入根节点root,返回以 root 为根的二叉树的最大深度。

如果 root 为空,则返回 0。

否则,递归地计算左子树和右子树的最大深度,取二者中较大的一个加一并返回。

5.判断链表是否有环
给定一个链表的头节点 head,判断这个链表是否有环。

示例:
给定链表 1->2->3->4->5 (5->4)->3->2->1 ,判断该链表是否有环。

这道题目可以使用快慢指针的方法来解决。

定义两个指针 fast 和 slow,初始时都指向头节点 head。

然后快指针每次移动两步,慢指针每次移动一步,如果链表中存在环,那么快指针最终会追上慢指针。

如果快指针到达链表的末尾,说明链表中不存在环。

在实现时需要注意指针的边界条件的处理。

相关文档
最新文档