自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 资源 (1)
  • 收藏
  • 关注

原创 最长公共前缀

题目描述编写一个函数来查找字符串数组中的最长公共前缀。示例1输入[“abca”,“abc”,“abca”,“abc”,“abcc”]返回值“abc”思路描述对于字符串数组中的字符串进行排序,然后判断出最短的字符串,进行for循环,比较最长和最短字符串的相同部分,截取该部分即可。代码描述class Solution {public: /** * * @param strs string字符串vector * @return string字符串

2020-10-30 16:52:55 142

原创 缺失数字

题目描述从0,1,2,…,n这n+1个数中选择n个数,找出这n个数中缺失的那个数,要求O(n)尽可能小。示例1输入[0,1,2,3,4,5,7]返回值6思路描述只需复杂度n即可,遍历数组,判断前一元素和后一元素是否只相差1,即可判断是否缺失代码描述class Solution {public: /** * 找缺失数字 * @param a int整型一维数组 给定的数字串 * @param aLen int a数组长度 * @return

2020-10-30 15:40:52 413

原创 求路径

题目描述一个机器人在m×n大小的地图的左上角(起点,下图中的标记“start"的位置)。机器人每次向下或向右移动。机器人要到达地图的右下角。(终点,下图中的标记“Finish"的位置)。可以有多少种不同的路径从起点走到终点?输入2,1返回值1示例2输入2,2返回值2思路描述遍历所有的可能,并累加所有的可能,直到达到终点代码描述class Solution {public: /** * * @param m int整型 * @par

2020-10-29 20:24:07 139

原创 删除有序链表中重复的元素

题目描述删除给出链表中的重复元素(链表中元素从小到大有序),使链表中的所有元素都只出现一次例如:给出的链表为1\to1\to21→1→2,返回1 \to 21→2.给出的链表为1\to1\to 2 \to 3 \to 31→1→2→3→3,返回1\to 2 \to 31→2→3.示例1输入{1,1,2}返回值{1,2}思路描述利用双指针,先循环第一个指针,另一个指针进行下一步,如果相同,那么第一个指针直接指向指针2的位置。代码描述/** * struct ListNode {

2020-10-29 19:38:34 747 1

原创 二叉树是否存在节点和为指定值的路径

题目描述给定一个二叉树和一个值sum,判断是否有从根节点到叶子节点的节点值之和等于um 的路径,例如:给出如下的二叉树,sum=22,返回true,因为存在一条路径 5→4→11→25→4→11→2的节点值之和为 22示例1输入{1,2},0返回值false示例2输入{1,2},3返回值true思路描述分成三种情况,1 节点不存在,返回false2 节点只有一个的时候,判定是否左子和右子均为空,且sum值等于该节点值3 递归的具体操作,递归左子和右子,同时更新sum的

2020-10-29 18:34:58 256

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

题目描述输入一个链表,输出该链表中倒数第k个结点。示例1输入1,{1,2,3,4,5}返回值{5}思路描述定义一个指针从头部出发,先走k个长度,再定义另一个指针,从头部出发,再让两指针进行同样步长的移动,直到第一个指针移到末尾,两指针永远相距k,那么另一个指针所指的位置就是倒数第k个。代码描述/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) {

2020-10-29 17:22:04 58

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

题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。示例1输入[1,2,3,2,2,2,5,4,2]返回值2思路描述假设出现次数最多的是numbers[0],然后统计每次出现次数,若是次数大于最开始定义的max对应的次数,那么改变成新的最大值,最后判定次数是否符合条件,输出max。代码描述class Solution {

2020-10-28 19:12:29 91

原创 平衡二叉树

题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树示例1输入{1,2,3,4,5,6,7}返回值true平衡二叉树的性质平衡二叉搜索树又被称为AVL树,且具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。思路描述定义一个函数用来找到左子和右子树的最大值,也就是最大深度,然后调用时直接判断是否高度差超过1即可代码描述class Solution {public:

2020-10-28 18:34:10 108

原创 判断一个链表是否为回文结构

题目描述给定一个链表,请判断该链表是否为回文结构。示例输入[1,2,2,1]返回值true思路描述可以理解回文结构即为从头部开始访问和从尾部开始访问的结果是一样的,故可以将链表全都压入栈中,然后和原来的链表的顺序中一个一个作比较,如果全都相同,那么就是回文结构代码描述/** * struct ListNode { * int val; * struct ListNode *next; * }; */class Solution {public: /**

2020-10-28 16:48:30 235

原创 二叉树的最大深度

题目描述求给定二叉树的最大深度,最大深度是指树的根结点到最远叶子结点的最长路径上结点的数量。思路描述通过递归,找到最深的一层,直接返回左子和右子树的累加1的结果,如果没有根节点,则返回0代码描述/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */class Solution {public: /** * * @par

2020-10-27 18:51:07 185

原创 二叉树的镜像

题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义: 源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5思路描述利用递归,递归过程中然后改变左子和右子的值,同时注意递归的函数需要返回值,而我们的主函数不需要返回函数值,故直接调用swapNodes即可代码描述/*struct TreeNode

2020-10-27 17:30:32 91

原创 数组中只出现一次的数字

题目描述一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。思路描述先对数组进行排序,然后判断该处数字与前后数字是否都不相同,那么说明就是该数字,同时考虑特殊情况,只有一次出现的数字在数组开头和末尾,同时使用flag来区分我们时第一个数字和第二个数字。代码描述class Solution {public: void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {

2020-10-27 16:40:26 105

原创 括号配对序列

题目描述给出一个仅包含字符’(’,’)’,’{’,’}’,’[‘和’]’,的字符串,判断给出的字符串是否是合法的括号序列括号必须以正确的顺序关闭,"()“和”()[]{}“都是合法的括号序列,但”(]“和”([)]"不合法。示例1输入“[”输出false示例2输入“[]”输出true思路描述实际就是配对问题,使用栈可以解决,若是左括号,则弹进栈,而输入是右括号的时候,判断和栈顶元素是不是配对的,不是,则输出false,否则为true,同时要判断字符串是否为空,若是在循环未结束时,

2020-10-27 15:57:44 185

原创 子数组的最大累加和问题

题目描述给定一个数组arr,返回子数组的最大累加和例如,arr = [1, -2, 3, 5, -2, 6, -1],所有子数组中,[3, 5, -2, 6]可以累加出最大的和12,所以返回12.[要求]时间复杂度为O(n)O(n),空间复杂度为O(1)O(1)示例输入[1, -2, 3, 5, -2, 6, -1]输出12思路描述动态规划,拆成小问题来解决,同时考虑数组为空,以及数组为1个元素的情况,大部分情况用来判定当前位置元素和前一位置元素相加会不会比当前位置元素大的情况,若大,

2020-10-25 17:11:51 238

原创 求平方根(二分法)

题目描述实现函数 int sqrt(int x),计算并返回x的平方根示例输入2输出1思路描述一般方法:我们第一个while循环直接就判定条件为i平方要小于x,同时i每次累乘2,直到i*i大于x,i-1即可注意这里,i的类型应定义为long,否则会溢出。二分法:设定好begin和end以及循环条件即可代码描述一般方法:class Solution {public: /** * * @param x int整型 * @return in

2020-10-25 16:10:45 1466

原创 跳台阶

题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。思路描述考虑要跳到n级的话,就只有两种可能,最后一步跳1级,或者跳2级,这两种情况要叠加,而我们递归结束需要知道number的第一位和第二位能返回什么样的值,同样也是返回1,2,定义初始条件即可代码描述class Solution {public: int jumpFloor(int number) { if (number==1) return

2020-10-25 16:02:46 66

原创 两数之和

题目描述给出一个整数数组,请在数组中找出两个加起来等于目标值的数,你给出的函数twoSum 需要返回这两个数字的下标(index1,index2),需要满足 index1小于index2.。注意:下标是从1开始的假设给出的数组中只存在唯一解例如:给出的数组为 {20, 70, 110, 150},目标值为90输出 index1=1, index2=2示例1输入[3,2,4],6输出[2,3]思路描述遍历数组,使用两个for循环,这里注意size和vector的使用,size函数可以用

2020-10-25 16:00:24 80

原创 两个链表的第一个公共节点

题目描述输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)思路描述遍历两个链表即可,但是要判定链表是否有一个为空,且在l1的链表循环中,每次都要重新从头节点开始遍历链表l2,并且每遍历完一遍l2后,都要使l1的指针指向下一个,进行新的循环代码描述/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), nex

2020-10-25 15:55:59 60

原创 用两个栈实现队列

题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。思路描述 关于stack的push和pop的操作,明白队列实际上就是插入一个栈1,弹出后插入另一个栈2,再将栈2元素弹出即可得到队列。 注意要判定是否为空的情况,代码描述class Solution{public: void push(int node) { stack1.push(node); } int pop() { if(stack1.

2020-10-25 15:52:52 52

原创 合并有序链表

题目描述将两个有序的链表合并为一个新链表,要求新的链表是通过拼接两个链表的节点来生成的。示例1输入{1},{}输出{1}示例2输入{1},{1}输出{1,1}思路这里是定义了一个新的链表,比较大小并插入的代码比较简单,但是需要注意的是新定义了一个l3,如何new一个新的节点,以及考虑两个链表单独为空的情况,并要注意,若是while循环结束后,l3未有新节点,要判断是否有一个为空,从而使其头节点指向新的节点代码描述/** * struct ListNode { * int v

2020-10-24 19:37:36 253

原创 实现二叉树先序,中序和后序

题目描述分别按照二叉树先序,中序和后序打印所有的节点。示例输入{1,2,3}输出[[1,2,3],[2,1,3],[2,3,1]]思路描述:总体是用递归实现,但要注意细节,利用vector可以更好得存储数据,且vector<vector>可存储二维数组,auto可以根据实际类型进行设定,代码描述:/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right;

2020-10-24 19:33:34 205

原创 二分查找

题目描述请实现有重复数字的有序数组的二分查找。输出在数组中第一个大于等于查找值的位置,如果数组中不存在这样的数,则输出数组长度加一。示例输入5,4,[1,2,4,4,5]输出3思路描述首先判断数组中是否存在该数,若不存在,直接输出数组长度加一由于输出大于等于查找值的位置,我们的left和right是能相同的,故可设定我们的位置pos值是能够取到mid的值的代码描述:class Solution {public: /** * 二分查找 * @param

2020-10-24 15:39:08 499

原创 合并两个有序数组

题目描述给出两个有序的整数数组A和B,请将数组B合并到数组A中,变成一个有序的数组注意:可以假设A数组有足够的空间存放B数组的元素,A和B中初始的元素数目分别为m和n思路:从数组的末尾开始,这样不用提前额外开辟空间,同时要考虑其中一个数组为空的情况代码:class Solution {public: void merge(int A[], int m, int B[], int n) { int i = m-1, j = n-1, index = m+n-1;

2020-10-23 21:46:51 276

原创 字符串的排列

题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则按字典序打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。思路:借用大佬的图,题目实际上是要进行全排列,所以我们需要进行递归,所有情况的描述,故用固定某字符再调换别的字符从而得到新的字符串,并设置为set,这样可以删掉重复的字符串涉及的知识点:vector的使用,递归的使用,set的使

2020-10-23 20:53:09 174

原创 反转链表

输入一个链表,反转链表后,输出新链表的表头思路:考虑反转链表,即先存进去的后取出来,符合栈的操作,故使用STL中的stack/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* ReverseList(ListNode* pHead) { stack&lt

2020-10-22 16:45:08 59

原创 判断链表是否成环

判断链表是否成环思路:设定两个指针,一个快,一个慢,如果相遇则成环,记住判定数组是否溢出,即代码while中的内容,p2不为空,且p2的下一个结点也不为空/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {p

2020-10-22 16:44:27 256

MNIST手写数字集(训练集和测试集)

MNIST手写数字集(训练集和测试集)

2022-02-09

空空如也

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

TA关注的人

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