![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C/C++面试
总结一些c/c++面试相关的知识点
私房菜
独乐乐不如众乐乐!!!!
展开
-
两个字符串大数的加法
以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。数据范围:s.length,t.length≤100000,字符串仅由'0'~‘9’构成要求:时间复杂度O(n)原创 2023-06-20 13:51:54 · 1549 阅读 · 0 评论 -
验证IP地址IPv4和IPv6
编写一个函数来验证输入的字符串是否是有效的 IPv4 或 IPv6 地址IPv4 地址由十进制数和点来表示,每个地址包含4个十进制数,其范围为 0 - 255, 用(".")分割。比如,172.16.254.1;同时,IPv4 地址内的数不会以 0 开头。比如,地址 172.16.254.01 是不合法的。IPv6 地址由8组16进制的数字来表示,每组表示 16 比特。这些组数字通过 (":")分割。比如, 2001:0db8:85a3:0000:0000:8a2e:0370:7334 是一个有原创 2023-06-20 13:30:35 · 3816 阅读 · 0 评论 -
字符串数组中的最长公共前缀
给你一个大小为 n的字符串数组 strs ,其中包含n个字符串 , 编写一个函数来查找字符串数组中的最长公共前缀,返回这个公共前缀。原创 2023-06-20 11:16:28 · 560 阅读 · 0 评论 -
两个链表相加
例如:链表 1 为 9->3->7,链表 2 为 6->3,最后生成新的结果链表为 1->0->0->0。假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数。数据范围:0≤n,m≤1000000,链表任意值 0≤val≤9。给定两个这种链表,请生成代表两个整数相加值的结果链表。要求:空间复杂度 O(n),时间复杂度 O(n)原创 2023-06-13 15:32:17 · 1284 阅读 · 0 评论 -
两个链表的第一个公共结点
输入分为是3段,第一段是第一个链表的非公共部分,第二段是第二个链表的非公共部分,第三段是第一个链表和第二个链表的公共部分。当然,如果两个链表的长度相同,那么第一次轮询就可以将公共节点查询出来,所以第一次轮询是很多有必要的。其实该题目只需要抓住一个重点,那就是当找到两个链表公共节点的第一个节点时,节点的指针是相同的,那么该节点的 next 也是相同的,然后,在回到题目的要求,题目要求时间复杂度为 O(n),那么中间的循环就需要深思,即轮询中不能出现暴力查找等情况。时间复杂度大概为O(n+m)原创 2023-06-13 10:26:00 · 1284 阅读 · 0 评论 -
删除链表的倒数第n个节点
循环是肯定需要的,那如果通过n次的循环,查找完整个链表,从而达到寻找倒数第 n 个节点这个目的,是该题的难点。数据范围: 链表长度 0≤n≤1000,链表中任意节点的值满足 0≤val≤100。另外要求时间复杂度为 O(n),那么则要求无法通过循环获取链表的长度。给定一个链表,删除链表的倒数第 n 个节点并返回链表的头指针。删除了链表的倒数第 n 个节点之后,链表变为1→2→3→5.给出的链表为: 1→2→3→4→5, n=2.通过题目分析,n是有效的,且n可能很大。题目保证 n 一定是有效的。原创 2023-06-12 15:49:25 · 949 阅读 · 0 评论 -
单向链表翻转
需要三个指针,一个指针在原来的链表上动起来,使用原来的 pHead 指针即可,让pHead 作为旧链表的指针一直往后动。另一个指针标记被摘出来的节点,该节点的next 指向新的链表。最后一个指针永远指向新的链表,并用于返回。给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。要求:空间复杂度 O(1) ,时间复杂度 O(n)。是否还有好的方法,请大神们不吝赐教!原创 2023-06-09 14:31:55 · 230 阅读 · 0 评论 -
链表内指定区间反转
需要三个指针,一个指针在原来的链表上动起来,使用原来的 pHead 指针即可,让pHead 作为旧链表的指针一直往后动。将一个节点数为 size 链表 m 位置到 n 位置之间的区间反转,要求时间复杂度 O(n),空间复杂度 O(1)。数据范围: 链表长度 0< size ≤1000,0原创 2023-06-09 14:23:22 · 1106 阅读 · 0 评论 -
删除链表的倒数第n个节点
题目描述:给定一个链表,删除链表的倒数第n个节点并返回链表的头指针例如, 给出的链表为:1->2->3->4->5, n= 2. 删除了链表的倒数第n个节点之后,链表变为1->2->3->5.备注:题目保证n一定是有效的请给出请给出时间复杂度为O(n)的算法思路分析:时间复杂度为O(n),最优解法是链表遍历一遍,因为链表是单向的,在遍历的过程中需要找到所需要的删除的节点位置。可以使用两个指针,在移动的过程中一个负责找到最后一.原创 2021-02-05 17:03:27 · 222 阅读 · 0 评论 -
跳台阶
1. 跳台阶题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。#include <stdio.h>// 每一次跳跃有两种选择,跳一个台阶,或跳两个台阶,不同的方式后面的跳跃就是不同的跳法// f(n) = f(n-1) + f(n-2),以此类推int jumpFloor1(int step, int n){ if (step > n) { return 0; }原创 2021-01-28 19:37:34 · 139 阅读 · 0 评论 -
链表中节点每k 个一组翻转
题目:将给出的链表中的节点每\ kk个一组翻转,返回翻转后的链表如果链表中的节点数不是\ kk的倍数,将最后剩下的节点保持原样你不能更改节点中的值,只能更改节点本身。要求空间复杂度 O(1)例如:给定的链表是1→2→3→4→5对于 k=2, 你应该返回 2→1→4→3→5对于 k=3, 你应该返回 3→2→1→4→5#include <stdio.h>#include <stdlib.h>typedef struct node{ ...原创 2021-02-05 15:23:24 · 942 阅读 · 0 评论 -
合并两个有序数组和链表
给出两个有序的整数数组 A 和 B,请将数组 B 合并到数组 A 中,变成一个有序的数组注意:可以假设A 数组有足够的空间存放B 数组的元素,A 和B 中初始的元素数目分别为m 和nB数组最终是会合并到A 中,在原来A 数组m个元素的基础上新加n个新元素,最终元素个数是m+n,最优方式是从A 数组的最后一个元素开始,与B中元素比较,最后的新的元素进行存放。原创 2021-02-05 15:21:30 · 363 阅读 · 0 评论 -
子数组的最大累加和问题
题目:给定一个数组arr,返回子数组的最大累加和例如,arr = [1, -2, 3, 5, -2, 6, -1],所有子数组中,[3, 5, -2, 6]可以累加出最大的和12,所以返回12.[要求]时间复杂度为O(n),空间复杂度为O(1)问题考察核心就是连续的数求和后不能负数,如果为负肯定影响后面数的和,例如,前两个数为1、-2,和为-1,与后面数3的和为2,那宁愿不要这两个数。#include <math.h>#include <stdio.h>.原创 2021-02-05 15:06:04 · 240 阅读 · 0 评论