自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

了解➔熟悉➔掌握➔精通

为之,则难者亦易矣;不为,则易者亦难矣。

  • 博客(1126)
  • 收藏
  • 关注

原创 最长不含重复字符的子字符串-C++

// 面试题48:最长不含重复字符的子字符串// 题目:请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子// 字符串的长度。假设字符串中只包含从'a'到'z'的字符。#include #include // 方法一:蛮力法bool hasDuplication(const std::string &str, int position[]);int longestSubstringWithoutDuplication_1(const st

2024-02-19 20:09:09 464

原创 礼物的最大价值-C++

// 面试题47:礼物的最大价值// 题目:在一个m×n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值// (价值大于0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向左或// 者向下移动一格直到到达棋盘的右下角。给定一个棋盘及其上面的礼物,请计// 算你最多能拿到多少价值的礼物?#include #include int getMaxValue_solution1(const int *values, int rows, int col

2024-02-19 20:00:26 634

原创 把数字翻译成字符串-C++

// 面试题46:把数字翻译成字符串// 题目:给定一个数字,我们按照如下规则把它翻译为字符串:0翻译成"a",1翻// 译成"b",……,11翻译成"l",……,25翻译成"z"。一个数字可能有多个翻译。例// 如12258有5种不同的翻译,它们分别是"bccfi"、"bwfi"、"bczi"、"mcfi"和// "mzi"。请编程实现一个函数用来计算一个数字有多少种不同的翻译方法。#include #include using namespace s

2024-02-19 19:53:02 463

原创 把数组排成最小的数-C++

// 面试题45:把数组排成最小的数// 题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼// 接出的所有数字中最小的一个。例如输入数组{3, 32, 321},则打印出这3个数// 字能排成的最小数字321323。#include "cstdio"#include #include int compare(const void *strNumber1, const void *strNumber2);// int型整数用十进

2024-02-18 21:36:16 456

原创 数字序列中某一位的数字-C++

// 面试题44:数字序列中某一位的数字// 题目:数字以0123456789101112131415…的格式序列化到一个字符序列中。在这// 个序列中,第5位(从0开始计数)是5,第13位是1,第19位是4,等等。请写一// 个函数求任意位对应的数字。#include #include using namespace std;int countOfIntegers(int digits);int digitAtIndex(int index,

2024-02-18 21:16:08 470

原创 从1到n整数中1出现的次数-C++

// 面试题43:从1到n整数中1出现的次数// 题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。例如// 输入12,从1到12这些整数中包含1 的数字有1,10,11和12,1一共出现了5次。#include #include #include // ====================方法一====================int NumberOf1(unsigned int n);int Numb

2024-02-18 21:09:40 561

原创 连续子数组的最大和-C++

// 面试题42:连续子数组的最大和// 题目:输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整// 数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。#include bool g_InvalidInput = false;int FindGreatestSumOfSubArray(int *pData, int nLength){ if ((pData == nullptr) || (nLength

2024-02-18 20:13:08 1929

原创 数据流中的中位数-C++

// 面试题41:数据流中的中位数// 题目:如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么// 中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,// 那么中位数就是所有数值排序之后中间两个数的平均值。#include #include #include #include using namespace std;template class

2024-02-18 20:10:46 411

原创 最小的k个数-C++

// 面试题40:最小的k个数// 题目:输入n个整数,找出其中最小的k个数。例如输入4、5、1、6、2、7、3、8// 这8个数字,则最小的4个数字是1、2、3、4。#include #include #include #include #include #include #include // Random Partitionint RandomInR

2024-02-18 13:39:13 479

原创 数组中出现次数超过一半的数字-C++

// 面试题39:数组中出现次数超过一半的数字// 题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例// 如输入一个长度为9的数组{1, 2, 3, 2, 2, 2, 5, 4, 2}。由于数字2在数组中// 出现了5次,超过数组长度的一半,因此输出2。#include #include #include // Random Partitionint RandomInRange(int min, int ma

2024-02-18 13:26:53 482

原创 字符串的排列-C++

// 面试题38:字符串的排列// 题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,// 则打印出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。#include void Permutation(char *pStr, char *pBegin);void Permutation(char *pStr){ if (pStr == nullptr) return; Perm

2024-02-18 13:20:16 378

原创 序列化二叉树-C++

// 面试题37:序列化二叉树// 题目:请实现两个函数,分别用来序列化和反序列化二叉树。#include #include #include using namespace std;struct BinaryTreeNode{ int m_nValue; BinaryTreeNode *m_pLeft; BinaryTreeNode *m_pRight;};BinaryTreeNode *CreateB

2024-02-18 12:37:29 381

原创 二叉搜索树与双向链表-C++

// 面试题36:二叉搜索树与双向链表// 题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求// 不能创建任何新的结点,只能调整树中结点指针的指向。#include struct BinaryTreeNode{ int m_nValue; BinaryTreeNode *m_pLeft; BinaryTreeNode *m_pRight;};BinaryTreeNode *CreateBinaryTreeNode(int va

2024-02-18 12:27:54 2577

原创 复杂链表的复制-C++

// 面试题35:复杂链表的复制// 题目:请实现函数ComplexListNode* Clone(ComplexListNode* pHead),复// 制一个复杂链表。在复杂链表中,每个结点除了有一个m_pNext指针指向下一个// 结点外,还有一个m_pSibling 指向链表中的任意结点或者nullptr。#include struct ComplexListNode{ int m_nValue; ComplexListNode *m_pNext;

2024-02-18 12:13:01 382

原创 二叉树中和为某一值的路径-C++

// 面试题34:二叉树中和为某一值的路径// 题目:输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所// 有路径。从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。#include #include struct BinaryTreeNode{ int m_nValue; BinaryTreeNode *m_pLeft; BinaryTreeNode *m_pRight;};BinaryTreeNode

2024-02-18 10:47:26 393

原创 二叉搜索树的后序遍历序列-C++

// 面试题33:二叉搜索树的后序遍历序列// 题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。// 如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。#include // BST:Binary Search Tree,二叉搜索树bool VerifySquenceOfBST(int sequence[], int length){ if (sequence == nullptr || length

2024-02-18 10:40:45 376

原创 之字形打印二叉树-C++

// 面试题32(三):之字形打印二叉树// 题目:请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺// 序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,// 其他行以此类推。#include #include struct BinaryTreeNode{ int m_nValue; BinaryTreeNode *m_pLeft; BinaryTreeNode *m_pRight;};Bin

2024-02-18 10:31:45 426

原创 分行从上到下打印二叉树-C++

// 面试题32(二):分行从上到下打印二叉树// 题目:从上到下按层打印二叉树,同一层的结点按从左到右的顺序打印,每一层// 打印到一行。#include #include struct BinaryTreeNode{ int m_nValue; BinaryTreeNode *m_pLeft; BinaryTreeNode *m_pRight;};BinaryTreeNode *CreateBinaryTreeNode(int

2024-02-16 21:44:13 437

原创 不分行从上往下打印二叉树-C++

// 面试题32(一):不分行从上往下打印二叉树// 题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。#include #include struct BinaryTreeNode{ int m_nValue; BinaryTreeNode *m_pLeft; BinaryTreeNode *m_pRight;};BinaryTreeNode *CreateBinaryTreeNode(int value){

2024-02-16 21:35:34 383

原创 栈的压入、弹出序列-C++

// 面试题31:栈的压入、弹出序列// 题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是// 否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1、2、3、4、// 5是某栈的压栈序列,序列4、5、3、2、1是该压栈序列对应的一个弹出序列,但// 4、3、5、1、2就不可能是该压栈序列的弹出序列。#include #include bool IsPopOrder(const int *pPush, const int *pPop

2024-02-16 21:26:24 414

原创 包含min函数的栈-C++

// 面试题30:包含min函数的栈// 题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min// 函数。在该栈中,调用min、push及pop的时间复杂度都是O(1)。#include #include #include template class StackWithMin{public: StackWithMin() {} virtual ~StackWithMin()

2024-02-16 21:20:12 2067

原创 顺时针打印矩阵-C++

// 面试题29:顺时针打印矩阵// 题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。#include void PrintMatrixInCircle(int **numbers, int columns, int rows, int start);void printNumber(int number);void PrintMatrixClockwisely(int **numbers, int columns, int rows){ if

2024-02-16 21:12:16 372

原创 对称的二叉树-C++

// 面试题28:对称的二叉树// 题目:请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和// 它的镜像一样,那么它是对称的。#include #include struct BinaryTreeNode{ int m_nValue; BinaryTreeNode *m_pLeft; BinaryTreeNode *m_pRight;};BinaryTreeNode *CreateBinaryTreeNode(int

2024-02-16 18:53:22 341

原创 二叉树的镜像-C++

// 面试题27:二叉树的镜像// 题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像。#include #include struct BinaryTreeNode{ int m_nValue; BinaryTreeNode *m_pLeft; BinaryTreeNode *m_pRight;};BinaryTreeNode *CreateBinaryTreeNode(int value){ BinaryTreeN

2024-02-16 14:03:57 436

原创 树的子结构-C++

// 面试题26:树的子结构// 题目:输入两棵二叉树A和B,判断B是不是A的子结构。#include struct BinaryTreeNode{ double m_dbValue; BinaryTreeNode *m_pLeft; BinaryTreeNode *m_pRight;};bool DoesTree1HaveTree2(BinaryTreeNode *pRoot1, BinaryTreeNode *pRoot2);bool Equa

2024-02-16 13:44:45 348

原创 合并两个排序的链表-C++

// 面试题25:合并两个排序的链表// 题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按// 照递增排序的。例如输入图3.11中的链表1和链表2,则合并之后的升序链表如链// 表3所示。#include #include #include struct ListNode{ int m_nValue; ListNode *m_pNext;};ListNode *CreateListNode(

2024-02-16 12:36:59 430

原创 反转链表-C++

// 面试题24:反转链表// 题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的// 头结点。#include #include #include struct ListNode{ int m_nValue; ListNode *m_pNext;};ListNode *CreateListNode(int value){ ListNode *pNode = new ListNode(

2024-02-16 12:29:21 1883

原创 链表中环的入口结点-C++

// 面试题23:链表中环的入口结点// 题目:一个链表中包含环,如何找出环的入口结点?例如,在图3.8的链表中,// 环的入口结点是结点3。#include #include #include struct ListNode{ int m_nValue; ListNode *m_pNext;};ListNode *CreateListNode(int value){ ListNode *pNode =

2024-02-16 09:40:30 2067

原创 链表中倒数第k个结点-C++

// 面试题22:链表中倒数第k个结点// 题目:输入一个链表,输出该链表中倒数第k个结点。为了符合大多数人的习惯,// 本题从1开始计数,即链表的尾结点是倒数第1个结点。例如一个链表有6个结点,// 从头结点开始它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个结点是// 值为4的结点。#include #include #include struct ListNode{ int m_nValue; Lis

2024-02-16 00:29:12 377

原创 调整数组顺序使奇数位于偶数前面-C++

// 面试题21:调整数组顺序使奇数位于偶数前面// 题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有// 奇数位于数组的前半部分,所有偶数位于数组的后半部分。#include void Reorder(int *pData, unsigned int length, bool (*func)(int));bool isEven(int n);// ====================方法一====================void Reo

2024-02-15 17:57:33 374

原创 表示数值的字符串-C++

// 面试题20:表示数值的字符串// 题目:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,// 字符串“+100”、“5e2”、“-123”、“3.1416”及“-1E-16”都表示数值,但“12e”、// “1a3.14”、“1.2.3”、“+-5”及“12e+5.4”都不是#include bool scanUnsignedInteger(const char **str);bool scanInteger(const char **str);

2024-02-15 17:46:00 405

原创 正则表达式匹配-C++

// 面试题19:正则表达式匹配// 题目:请实现一个函数用来匹配包含'.'和'*'的正则表达式。模式中的字符'.'// 表示任意一个字符,而'*'表示它前面的字符可以出现任意次(含0次)。在本题// 中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"// 和"ab*ac*a"匹配,但与"aa.a"及"ab*a"均不匹配。#include bool matchCore(const char *str, const char *pattern);

2024-02-15 17:39:26 363

原创 删除链表中重复的结点-C++

// 面试题18(二):删除链表中重复的结点// 题目:在一个排序的链表中,如何删除重复的结点?例如,在图3.4(a)中重复// 结点被删除之后,链表如图3.4(b)所示。#include #include #include struct ListNode{ int m_nValue; ListNode *m_pNext;};ListNode *CreateListNode(int value){ Lis

2024-02-15 17:30:20 380

原创 在O(1)时间删除链表结点-C++

// 面试题18(一):在O(1)时间删除链表结点// 题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该// 结点。#include #include #include struct ListNode{ int m_nValue; ListNode *m_pNext;};ListNode *CreateListNode(int value){ ListNode *pNode =

2024-02-15 17:15:40 364

原创 打印1到最大的n位数-C++

// 面试题17:打印1到最大的n位数// 题目:输入数字n,按顺序打印出从1最大的n位十进制数。比如输入3,则// 打印出1、2、3一直到最大的3位数即999。#include #include void PrintNumber(char *number);bool Increment(char *number);void Print1ToMaxOfNDigitsRecursively(char *number, int length, int index

2024-02-15 17:02:05 401

原创 数值的整数次方-C++

// 面试题16:数值的整数次方// 题目:实现函数double Power(double base, int exponent),求base的exponent// 次方。不得使用库函数,同时不需要考虑大数问题。#include #include bool g_InvalidInput = false;bool equal(double num1, double num2);double PowerWithUnsignedExponent(double b

2024-02-15 11:48:47 365

原创 二进制中1的个数-C++

// 面试题15:二进制中1的个数// 题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如// 把9表示成二进制是1001,有2位是1。因此如果输入9,该函数输出2。#include int NumberOf1_Solution1(int n){ int count = 0; unsigned int flag = 1; while (flag) { if (n & flag) coun

2024-02-15 11:40:44 394

原创 剪绳子-C++

// 面试题14:剪绳子// 题目:给你一根长度为n绳子,请把绳子剪成m段(m、n都是整数,n>1并且m≥1)。// 每段的绳子的长度记为k[0]、k[1]、……、k[m]。k[0]*k[1]*…*k[m]可能的最大乘// 积是多少?例如当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此// 时得到最大的乘积18。#include #include // ====================动态规划====================

2024-02-15 10:05:08 456

原创 机器人的运动范围-C++

// 面试题13:机器人的运动范围// 题目:地上有一个m行n列的方格。一个机器人从坐标(0, 0)的格子开始移动,它// 每一次可以向左、右、上、下移动一格,但不能进入行坐标和列坐标的数位之和// 大于k的格子。例如,当k为18时,机器人能够进入方格(35, 37),因为3+5+3+7=18。// 但它不能进入方格(35, 38),因为3+5+3+8=19。请问该机器人能够到达多少个格子?#include int movingCountCore(int threshold,

2024-02-15 09:58:34 346

原创 矩阵中的路径-C++

// 面试题12:矩阵中的路径// 题目:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有// 字符的路径。路径可以从矩阵中任意一格开始,每一步可以在矩阵中向左、右、// 上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入// 该格子。例如在下面的3×4的矩阵中包含一条字符串“bfce”的路径(路径中的字// 母用下划线标出)。但矩阵中不包含字符串“abfb”的路径,因为字符串的第一个// 字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入这个格子。

2024-02-15 09:36:01 363

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除