每日一题
辰星~
这个作者很懒,什么都没留下…
展开
-
对称二叉树
//请实现一个函数,用来判断一棵二叉树是不是对称的。//注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {public: bool isSymmetrical(TreeN原创 2020-10-04 19:31:00 · 190 阅读 · 0 评论 -
二维数组中的查找
//在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,//每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个//整数,判断数组中是否含有该整数。#include<vector>#include<iostream>using namespace std;class Solution {public: bool Find(int target, vector<vector<int>> ar原创 2020-10-04 16:22:17 · 155 阅读 · 0 评论 -
矩形覆盖
我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2n的大矩形,总共有多少种方法?比如n=3时,23的矩形块有3种覆盖方法:class Solution {public: int rectCover(int number) { //规律题,列出前几个即可发现规律 //类似斐波那契数列 if (number == 0) return 0; int first = 1, second = 2; int sum = 0; for (in原创 2020-10-04 15:05:56 · 337 阅读 · 0 评论 -
链表倒数第k个结点
输入一个链表,输出该链表中倒数第k个结点。/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) { //快慢指针,转化为正数第几个 unsigned int temp =原创 2020-10-04 15:03:32 · 310 阅读 · 0 评论 -
两句话中不常见单词
//给定两个句子?A?和?B?。?(句子是一串由空格分隔的单词。每个单词仅由小写字母组成。)////如果一个单词在其中一个句子中只出现一次,在另一个句子中却没有出现,那么这个单词就是不常见的。////返回所有不常用单词的列表。////您可以按任何顺序返回列表。////来源:力扣(LeetCode)//链接:https ://leetcode-cn.com/problems/uncommon-words-from-two-sentences//著作权归领扣网络所有。商业转载请联系官方授权,原创 2020-10-04 15:00:54 · 111 阅读 · 0 评论 -
迷宫问题--Dfs
链接:https://www.nowcoder.com/questionTerminal/cf24906056f4488c9ddb132f317e03bc来源:牛客网定义一个二维数组N*M(其中2<=N<=10;2<=M<=10),如5 × 5数组下所示:int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0,原创 2020-10-04 14:53:24 · 206 阅读 · 0 评论 -
年终奖
小东所在公司要发年终奖,而小东恰好获得了最高福利,他要在公司年会上参与一个抽奖游戏,游戏在一个6*6的棋盘上进行,上面放着36个价值不等的礼物,每个小的棋盘上面放置着一个礼物,他需要从左上角开始游戏,每次只能向下或者向右移动一步,到达右下角停止,一路上的格子里的礼物小东都能拿到,请设计一个算法使小东拿到价值最高的礼物。给定一个6*6的矩阵board,其中每个元素为对应格子的礼物价值,左上角为[0,0],请返回能获得的最大价值,保证每个礼物价值大于100小于1000。class Bonus {原创 2020-10-04 14:40:38 · 141 阅读 · 0 评论 -
树的子结构
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)二叉树类的题一般使用递归,分制求解左右子树的方法/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {public: //判断树proot2是否是pr原创 2020-10-04 14:37:50 · 56 阅读 · 0 评论 -
数值的整数次方
/给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0/解法一:循环求解class Solution {public: double Power(double base, int exponent) { if (base == 0) return 0.0; if (exponent == 0) return 1.0; //整数包含负数,2^-3=(1/2)^3; if (e原创 2020-10-04 14:15:30 · 70 阅读 · 0 评论 -
替换空格
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。class Solution {public: void replaceSpace(char* str, int length) { if (str == nullptr || length <= 0) return; int space_count = 0; //统计空格数量 for (int i = 0; i &原创 2020-10-04 14:06:34 · 71 阅读 · 0 评论 -
调整数组顺序使奇数位于偶数前
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。class Solution {public: void reOrderArray(vector<int>& array) { //开辟辅助数组.先插入奇数后插入偶数 vector<int> ret(array.size(), 0); int index = 0; for (int i原创 2020-10-03 17:55:21 · 131 阅读 · 0 评论 -
字符流中第一个不重复的字符
#include<unordered_map>#include<queue>using namespace std;class Solution{public: //Insert one char from stringstream //队列元素无重复,且保证字符顺序 queue<char> q; //统计每个字符出现的次数 unordered_map<char, int> um; //插入字符 void Insert(char ch)原创 2020-10-03 17:53:27 · 65 阅读 · 0 评论 -
最长不重复子串
给定一个字符串,找出最长的不具有重复字符的子串的长度。例如,“abcabcbb”不具有重复字符的最长子串是“abc”,长度为3。对于“bbbbb”,最长的不具有重复字符的子串是“b”,长度为1。//解法一,暴力搜索法#include<unordered_map>class Solution {public: /** * * @param s string字符串 * @return int整型 */ int lengthOfLongestSubstring(stri原创 2020-10-03 17:49:18 · 331 阅读 · 0 评论 -
最长回文子串
/*给定一个字符串 s,找到 s 中最长的回文子串。你可以假设?s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-palindromic-substring著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。*/class Solution {原创 2020-10-03 17:24:37 · 66 阅读 · 0 评论 -
求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。//解法一(递归模拟循环)class Solution {public: int sum=0; int Sum_Solution(int n) { sum+=n; --n; //&&am...原创 2019-11-04 15:33:13 · 110 阅读 · 0 评论 -
括号匹配问题
LeetCode关于栈的练习:括号匹配问题//括号匹配(利用栈后进先出的特点)bool isValid(char * s){ //获取字符串长度 int len=strlen(s); //模拟实现一个简单的栈 char* stack=(char*)malloc(len+1); if(len==0||s[0]=='\0') return true...原创 2019-10-17 21:30:21 · 273 阅读 · 0 评论 -
复制带随机指针的单链表(三步法)
LeetCode练习:给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的深拷贝。//复制带随机指针的单链表/*// Definition for a Node.class Node {public: int val; Node* next; Node* random; Node() {} ...原创 2019-10-16 20:55:10 · 220 阅读 · 0 评论 -
返回开始入环的结点
LeetCode练习,返回单链表的开始入环的结点,若无环返回NULL//返回入环结点,无环返回NULL/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode *detectCycle...原创 2019-10-16 20:46:30 · 115 阅读 · 0 评论 -
判断单链表是否有环
LeetCode练习 判断单链表是否有环//判断单链表是否有环//快慢指针法,慢指针一次走一步,快指针一次走两步,若有环快慢指针一定能相遇/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */bool hasC...原创 2019-10-16 20:41:09 · 57 阅读 · 0 评论 -
相交链表
LeetCode练习相交链表//相交链表/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode *getIntersectionNode(struct ListNode *headA...原创 2019-10-16 20:37:38 · 83 阅读 · 0 评论 -
回文链表
对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。回文链表形如:1->2->3->2->1//回文链表/*struct ListNode { int val; struct ListNode *next;...原创 2019-10-16 20:32:41 · 196 阅读 · 0 评论 -
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。
LeetCode练习:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。如:链表1->2->3->3->4->4->5 处理后为 1->2->5/*struct ListNode { int val; struct ListNode *next; ListNode(int x...原创 2019-10-16 20:27:26 · 230 阅读 · 0 评论 -
合并两个有序链表
LeetCode合并两个有序链表//合并两个有序链表/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode* mergeTwoLists(struct ListNode* l1,...原创 2019-10-16 20:12:02 · 68 阅读 · 0 评论 -
返回单链表中间结点
这里只贴了函数,该函数依赖于之前的博文 单链表及单链表的基本操作实现//返回单链表中间节点//指针一个一次走一步,一个一次走两步即可实现void FindMiddleNode(SingleList* sl) { assert(sl); SingleListNode* slow = sl->_head; SingleListNode* fast = sl->_head; i...原创 2019-10-13 10:48:08 · 276 阅读 · 1 评论 -
反转单链表
这里只贴了函数,该函数依赖于之前的博文 单链表及单链表的基本操作实现//反转单链表void ReversalList(SingleList* sl) { assert(sl); SingleListNode* cur = sl->_head; SingleListNode* prev= NULL; SingleListNode* next = cur->_next; if...原创 2019-10-13 10:44:13 · 80 阅读 · 0 评论 -
被围绕的区域--Dfs
/*给定一个二维的矩阵,包含?‘X’?和?‘O’(字母 O)。找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的?‘O’ 用 ‘X’ 填充。示例:X X X XX O O XX X O XX O X X运行你的函数后,矩阵变为:X X X XX X X XX X X XX O X X解释:被围绕的区间不会存在于边界上,换句话说,任何边界上的?‘O’?都不会被填充为?‘X’。任何不在边界上,或不与边界上的?‘O’?相连的?‘O’?最终都会被填充为?‘X’。如果两个元素在水平或垂原创 2020-10-03 17:07:54 · 184 阅读 · 0 评论 -
岛屿的周长--Dfs
/*给定一个包含 0 和 1 的二维网格地图,其中 1 表示陆地?0 表示水域。网格中的格子水平和垂直方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表示陆地的格子相连组成的岛屿)。岛屿中没有“湖”(“湖” 指水域在岛屿内部且不和岛屿周围的水相连)。格子是边长为 1 的正方形。网格为长方形,且宽度和高度均不超过 100 。计算这个岛屿的周长。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/island-原创 2020-10-03 17:05:39 · 122 阅读 · 0 评论 -
岛屿的最大面积-Dfs
/*给定一个包含了一些 0 和 1 的非空二维数组?grid 。一个?岛屿?是由一些相邻的?1?(代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在水平或者竖直方向上相邻。你可以假设?grid 的四个边缘都被 0(代表水)包围着。找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为 0 。)来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/max-area-of-island著作权归领扣网络所有。商业转载请联系官方授权,非商业原创 2020-10-03 17:02:59 · 121 阅读 · 0 评论 -
岛屿数量--Dfs
/*给你一个由?‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/number-of-islands著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。*//*示例 1:输入:[[‘1’,‘1’,‘1’,‘1’,‘0’],[‘1原创 2020-10-03 17:01:22 · 93 阅读 · 0 评论 -
图形渲染--Dfs
/*有一幅以二维整数数组表示的图画,每一个整数表示该图画的像素值大小,数值在 0 到 65535 之间。给你一个坐标?(sr, sc)?表示图像渲染开始的像素值(行 ,列)和一个新的颜色值?newColor,让你重新上色这幅图像。为了完成上色工作,从初始坐标开始,记录初始坐标的上下左右四个方向上像素值与初始坐标相同的相连像素点,接着再记录这四个方向上符合条件的像素点与他们对应四个方向上像素值与初始坐标相同的相连像素点,……,重复该过程。将所有有记录的像素点的颜色值改为新的颜色值。最后返回经过上色渲染后原创 2020-10-03 16:49:21 · 121 阅读 · 0 评论 -
员工的重要性--Dfs
/*给定一个保存员工信息的数据结构,它包含了员工唯一的id,重要度?和 直系下属的id。比如,员工1是员工2的领导,员工2是员工3的领导。他们相应的重要度为15, 10, 5。那么员工1的数据结构是[1, 15, [2]],员工2的数据结构是[2, 10, [3]],员工3的数据结构是[3, 5, []]。注意虽然员工3也是员工1的一个下属,但是由于并不是直系下属,因此没有体现在员工1的数据结构中。现在输入一个公司的所有员工信息,以及单个员工id,返回这个员工和他所有下属的重要度之和。来源:力扣(原创 2020-10-03 16:40:16 · 71 阅读 · 0 评论 -
二进制中1的个数
给一个整数判断二进制中1的个数,包含负数,负数用补码表示。因为存在负数,所以无法直接按位&1,后右移一位,因为负数会一直在最高位补1.造成死循环。n&(n-1)原来n的二进制表示中最低位的1就会变为0,这种方法效率高,会直接跳过与二进制0的判断。class Solution {public: int NumberOf1(int n) { int count=0; while(n!=0){ count++原创 2020-08-18 18:18:14 · 94 阅读 · 0 评论 -
重建二叉树,根据前序中序遍历构建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。前序遍历:根左右中序遍历:左根右根据前序遍历我们可以知道根节点,根据中序遍历我们可以知道根节点的左右子树结点有哪些。如:前序:{1,2,4,7,3,5,6,8} 中序{4,7,2,1,5,3,8,6}根据前序:知道根为 1,那么左子树就为中序的下标0-2,原创 2020-08-18 16:14:58 · 101 阅读 · 0 评论 -
旋转数组的最小数字
| 大 | 小 | mid midclass Solution {public: int minNumberInRotateArray(vector<int> rotateArray) { int left=0,right=rotateArray.size()-1; while(left<right){ if(rotateArray[left]<rota原创 2020-08-17 15:01:15 · 82 阅读 · 0 评论 -
反转单链表
/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* ReverseList(ListNode* pHead) { if(pHead==nullptr) return pHead; ListNode* tmp=n原创 2020-08-17 13:25:51 · 81 阅读 · 0 评论 -
合并两个有序单链表
/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* Merge(ListNode* pHead1, ListNode* pHead2) { ListNode* head=new ListNode(1); ListNode* cur=h原创 2020-08-17 13:25:06 · 89 阅读 · 0 评论 -
二叉搜索树与双向链表
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。二叉搜索树按中序遍历有序,因此我们只需按照中序遍历的顺序修改指向,但是如何知道left该指向的前一个节点了,所以我们需要一个指针pre在遍历时保存前一个结点。pre赋初值为nullptr若pre不为nullptr,所以pre为当前根节点中序的前一个结点,修改指向即可。当遍历到最左节点时,此时pre==nullptr,则只需要将当前根赋给pre就行,因为最左节点的left指向为nullp原创 2020-08-17 12:38:53 · 99 阅读 · 0 评论 -
变态跳台阶
//一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙//上一个n级的台阶总共有多少种跳法。假设跳上第n阶台阶的方法有f【n】种,若最后一次跳1机,则前面需要跳n-1,所以有f(n-1)种;最后一次跳两级,则前面需要跳n-2级,则有f(n-2)种跳法,,,,依次类推,得f(n)=f(n-1)+f(n-2)+...+f(1)+f(0)类比得f(n-1)=f(n-2)+...+f(1)+f(0)因此f(n)=2*f(n-1);也可以通过依次列举看出规律f[0]=f[1]=1;原创 2020-08-17 11:29:49 · 78 阅读 · 0 评论 -
二叉树的下一个结点
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。/*struct TreeLinkNode { int val; struct TreeLinkNode *left; struct TreeLinkNode *right; struct TreeLinkNode *next; TreeLinkNode(int x) :val(x), left(NULL), right(NULL)原创 2020-07-29 21:38:20 · 79 阅读 · 0 评论 -
把二叉树打印成多行
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {public://与二叉树的层序遍历类似,使用队列,只不过需要增加一层循原创 2020-07-29 20:39:58 · 86 阅读 · 0 评论