随笔分类 - C、C++ 刷题
摘要:// 面试题61:扑克牌的顺子 // 题目:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。 // 2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王可以看成任意数字。 #include int Compare(const void *arg1, const void *arg2); bool IsContinuous(int* numbers, i...
阅读全文
摘要:// 面试题60:n个骰子的点数 // 题目:把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s // 的所有可能的值出现的概率。 #include #include int g_maxValue = 6; // ====================方法一==================== //使用递归,还是会有重复计算 void Probability(i...
阅读全文
摘要:// 面试题59(二):队列的最大值 // 题目:给定一个数组和滑动窗口的大小,请找出所有滑动窗口里的最大值。例如, // 如果输入数组{2, 3, 4, 2, 6, 2, 5, 1}及滑动窗口的大小3,那么一共存在6个 // 滑动窗口,它们的最大值分别为{4, 4, 6, 6, 6, 5}, #include #include #include using namespace std...
阅读全文
摘要:// 面试题59(一):滑动窗口的最大值 // 题目:给定一个数组和滑动窗口的大小,请找出所有滑动窗口里的最大值。例如, // 如果输入数组{2, 3, 4, 2, 6, 2, 5, 1}及滑动窗口的大小3,那么一共存在6个 // 滑动窗口,它们的最大值分别为{4, 4, 6, 6, 6, 5}, #include #include #include using namespace s...
阅读全文
摘要:// 面试题58(二):左旋转字符串 // 题目:字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。 // 请定义一个函数实现字符串左旋转操作的功能。比如输入字符串"abcdefg"和数 // 字2,该函数将返回左旋转2位得到的结果"cdefgab"。 #include #include void Reverse(char *pBegin, char *pEnd); ch...
阅读全文
摘要:// 面试题58(一):翻转单词顺序 // 题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。 // 为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. ", // 则输出"student. a am I"。 #include void Reverse(char *pBegin, char *pEnd); char* Reverse...
阅读全文
摘要:// 面试题57(二):为s的连续正数序列 // 题目:输入一个正数s,打印出所有和为s的连续正数序列(至少含有两个数)。 // 例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以结果打印出3个连续序列1~5、 // 4~6和7~8。 #include void PrintContinuousSequence(int small, int big); void Find...
阅读全文
摘要:// 面试题57(一):和为s的两个数字 // 题目:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们 // 的和正好是s。如果有多对数字的和等于s,输出任意一对即可。 #include bool FindNumbersWithSum(int data[], int length, int sum, int* num1, int* num2) { bool ...
阅读全文
摘要:// 面试题56(二):数组中唯一只出现一次的数字 // 题目:在一个数组中除了一个数字只出现一次之外,其他数字都出现了三次。请 // 找出那个吃出现一次的数字。 #include int FindNumberAppearingOnce(int numbers[], int length) { if (numbers == nullptr || length = 0; --j)//...
阅读全文
摘要:// 面试题56(一):数组中只出现一次的两个数字 // 题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序 // 找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。 #include unsigned int FindFirstBitIs1(int num); bool IsBit1(int num, unsigned int indexBi...
阅读全文
摘要:// 面试题55(二):平衡二叉树 // 题目:输入一棵二叉树的根结点,判断该树是不是平衡二叉树。如果某二叉树中 // 任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。 #include #include "BinaryTree.h" // ====================方法1==================== //迭代的从上到下,判断每个节点是否是平衡树,...
阅读全文
摘要:// 面试题55(一):二叉树的深度 // 题目:输入一棵二叉树的根结点,求该树的深度。从根结点到叶结点依次经过的 // 结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 //如果左右节点只有一个存在,则深度为该存在的节点的深度+1 //如果左右节点都存在,则深度为最大子节点深度+1 #include #include "BinaryTree.h" int TreeDep...
阅读全文
摘要:// 面试题54:二叉搜索树的第k个结点 // 题目:给定一棵二叉搜索树,请找出其中的第k大的结点。 #include #include "BinaryTree.h" const BinaryTreeNode* KthNodeCore(const BinaryTreeNode* pRoot, unsigned int& k); const BinaryTreeNode* KthNode(...
阅读全文
摘要:// 面试题53(三):数组中数值和下标相等的元素 // 题目:假设一个单调递增的数组里的每个元素都是整数并且是唯一的。请编程实 // 现一个函数找出数组中任意一个数值等于其下标的元素。例如,在数组{-3, -1, // 1, 3, 5}中,数字3和它的下标相等。 //思想:因为这里也是递增的,如果中间点的值大于下标,那后面所有值都会大于相应下标,同理中间点小于下标,前面都会小于下标 #inc...
阅读全文
摘要:// 面试题53(二):0到n-1中缺失的数字 // 题目:一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字 // 都在范围0到n-1之内。在范围0到n-1的n个数字中有且只有一个数字不在该数组 // 中,请找出这个数字。 #include //可以用等差数列求和得到A,然后求数组全部数字和B,然后A-B是缺失的数字,但是该算法时间复杂度是O(n),没有利用递增排序的特点 ...
阅读全文
摘要:// 面试题53(一):数字在排序数组中出现的次数 // 题目:统计一个数字在排序数组中出现的次数。例如输入排序数组{1, 2, 3, 3, // 3, 3, 4, 5}和数字3,由于3在这个数组中出现了4次,因此输出4。 #include int GetFirstK(const int* data, int length, int k, int start, int end); int ...
阅读全文
摘要:// 面试题52:两个链表的第一个公共结点 // 题目:输入两个链表,找出它们的第一个公共结点。 #include #include "List.h" unsigned int GetListLength(ListNode* pHead); //下面这个时间复杂度是O(m+n),且不用辅助空间 //另一种方法是使用两个栈,从尾到头比较,这样时间复杂度不变,空间复杂度O(m+n) ListN...
阅读全文
摘要:// 面试题51:数组中的逆序对 // 题目:在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组 // 成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。 #include using namespace std; int InversePairsCore(int* data, int* copy, int start, int end); int InverseP...
阅读全文
摘要:// 面试题50(二):字符流中第一个只出现一次的字符 // 题目:请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从 // 字符流中只读出前两个字符"go"时,第一个只出现一次的字符是'g'。当从该字 // 符流中读出前六个字符"google"时,第一个只出现一次的字符是'l'。 #include #include using namespace std; class ...
阅读全文
摘要:// 面试题50(一):字符串中第一个只出现一次的字符 // 题目:在字符串中找出第一个只出现一次的字符。如输入"abaccdeff",则输出 // 'b'。 #include #include //使用一个长度为常量的哈希表,两次遍历,时间复杂度O(n),空间复杂度O(1) char FirstNotRepeatingChar(const char* pString) { if ...
阅读全文

浙公网安备 33010602011771号