自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 收藏
  • 关注

原创 剑指 Offer 12. 矩阵中的路径

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

2021-01-31 23:51:15 51

原创 剑指 Offer 55 - II. 平衡二叉树

剑指 Offer 55 - II. 平衡二叉树输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。思路:写一个计算树深度的函数,首先判断这棵树的根节点左右子树的高度是否相差小于等于1,然后再递归的判断左右子树是不是平衡树。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left;

2021-01-31 21:37:53 34

原创 剑指 Offer 53 - II. 0~n-1中缺失的数字

一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。思路:使用二分查找,可以看到,在缺失元素之前,数组下标等于数组值,在缺失元素之后数组下标不等于数组值。因此,如果数组下标与数组值相同,则收缩左边界。如果数组下标与数组值不等,则收缩右边界class Solution {public: int missingNumber(vector<int>& nums)

2021-01-31 13:52:44 39

原创 剑指 Offer 10- II. 青蛙跳台阶问题

剑指 Offer 10- II. 青蛙跳台阶问题与斐波那契数列是一样的问题。青蛙跳上第n级台阶的方式是第n-1级的方式数+第n-2级的方式数。class Solution {public: int numWays(int n) { if(n==0) return 1; vector<int> dp(n+2,0); dp[1] = 1; dp[2] = 2; for(int i=3;i<=n;i

2021-01-31 13:30:55 47

原创 剑指 Offer 10- I. 斐波那契数列

剑指 Offer 10- I. 斐波那契数列使用动态规划算法计算,问题点,如果在定义数组dp的时候不指定长度,就会报错:runtime error: reference binding to null pointer of type ‘int’ (stl_vector.h)vector不是可以自己增长的么?注意:需要写成n+2,因为数组至少有两个值0和1class Solution {public: int fib(int n) { //如果我写成vector<in

2021-01-31 13:11:38 64 1

原创 剑指 Offer 53 - I. 在排序数组中查找数字 I

剑指 Offer 53 - I. 在排序数组中查找数字 I统计一个数字在排序数组中出现的次数。解题思路:使用二分查找搜索左边界和右边界,然后做差即可。错误点:1.循环不变量:保持区间为左开右闭,则当left==right时即可退出循环,例如[2,2)时区间已经没有元素,不需要进行区间范围的排除。2.查找左边界时,主要的判断步骤当(nums[mid]==target)时,right = mid;3.查找右边界时,主要的判断步骤当(nums[mid]==target)时,left = mid+1;

2021-01-28 14:07:59 51

原创 剑指 Offer 42. 连续子数组的最大和

剑指 Offer 42. 连续子数组的最大和输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。解题思路:使用动态规划算法,dp[i]的含义是以第i个元素为结尾的最大连续子数组的最大和。这个算法能够使用O(1)的空间复杂度,原地修改,下次试试。class Solution {public: int maxSubArray(vector<int>& nums) { int n = nums.size();

2021-01-25 22:17:27 48

原创 剑指 Offer 40. 最小的k个数

剑指 Offer 40. 最小的k个数输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。解题思路:利用快排的partition函数,只要保证第k-1个的元素已经放到正确位置,则从第0个到k-1个元素就一定是最小的k个元素。在定位到第k-1个元素的过程中,还仿佛使用了二分查找的思想。错误记录:1.返回空数组可以这么写:return vector();2.返回数组的前k个元素的方式:return vector&lt

2021-01-25 21:48:22 95

原创 剑指 Offer 30. 包含min函数的栈

剑指 Offer 30. 包含min函数的栈定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。解题思路:借助辅助栈,push时,当辅助栈为空或入栈元素<=辅助栈栈顶元素时,入主栈同时入辅助栈。pop时,当主栈与辅助栈栈顶元素相同时,同时弹出辅助栈元素和主栈元素。class MinStack { stack<int> s; stack<int> m;public:

2021-01-25 13:30:44 56

原创 剑指 Offer 39. 数组中出现次数超过一半的数字

剑指 Offer 39. 数组中出现次数超过一半的数字思路:把数组中元素放到哈希表中,键为数组中元素值,值为数组中元素出现的次数。判断该出现次数是否大于(数组大小/2)向下取整。class Solution {public: int majorityElement(vector<int>& nums) { int size = nums.size(); //if(size==0) return 0; map<int,int> mmap; for

2021-01-25 12:03:37 55

原创 剑指 Offer 28. 对称的二叉树

剑指 Offer 28. 对称的二叉树思路:compare函数的作用是:如果左右两棵树对称,返回true,否则返回false.在compare函数内部,判断两棵树对称的方式为:如果树1的左子树与树2的右子树对称,且树1的右子树与树2的左子树对称,则树1和树2是对称的。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode

2021-01-24 23:40:27 55

原创 剑指 Offer 52. 两个链表的第一个公共节点

剑指 Offer 52. 两个链表的第一个公共节点思路:当两个指针速度相同时(每次循环向前走一步),当距离相同时,两个指针就会相遇,使距离相同的方式就是“走另一个指针曾经走过的路”/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */clas

2021-01-24 22:52:48 49

原创 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。解题思路:双指针错误点:忘记写括号了:((nums[left]&1)!=0),这里如果不写括号会有问题。class Solution {public: vector<int> exchange(vector<int>& nums) { int left=0,right=nums.size()-1; wh

2021-01-24 22:32:43 46

原创 剑指 Offer 32 - II. 从上到下打印二叉树 II

剑指 Offer 32 - II. 从上到下打印二叉树 II从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。解题思路:简单的层序遍历,错误点:忘记处理根节点为空的情况。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val

2021-01-24 22:10:44 49

原创 static修饰的变量是不是仅限于本文件使用的问题C++

static修饰的变量是不是仅限于本文件使用的问题:加了static确实限制了其作用域为本文件,在不include的情况下,即使Extern之后也不能使用(编译不过)例子如下:a.cpp文件如下:#include<iostream>using namespace std;int a = 123;b.cpp文件如下:#include<iostream>using namespace std;extern int a;int main(){ cout&

2021-01-22 15:38:14 1323

原创 git用法整理(持续更新)

1.如何查看两次提交的不同?git diff [] []比较两个commit-id之间的差异我的使用实例:git diff dsoei92ur23jtg902u39geirjdo…23rg209fjjfaejf2jriljdgaijg其中第一个commit-id是时间上较早的提交,第二个commit-id是时间上较晚的提交。git diff --stat [] []能够简单列出修改的文件2.git mergegit-merge命令是用于从指定的commit(s)合并到当前分支的操作。3.

2021-01-14 18:55:58 94

空空如也

空空如也

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

TA关注的人

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