自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 力扣738. 单调递增的数字

题目:给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。(当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。)思路:贪心我们可以从高到低按位构造这个小于等于 N 的最大单调递增的数字。假设不考虑 N 的限制,那么对于一个长度为 n 的数字,最大单调递增的数字一定是每一位都为 9 的数字。记strN[i] 表示数字 N 从高到低的第 i 位的数字(i 从 0 开始)。如果整个数字 N 本身已经是

2020-12-15 10:30:36 172

原创 分割数组为连续子序列

题目:给你一个按升序排序的整数数组 num(可能包含重复数字),请你将它们分割成一个或多个子序列,其中每个子序列都由连续整数组成且长度至少为 3 。如果可以完成上述分割,则返回 true ;否则,返回 false 。示例 1:输入: [1,2,3,3,4,5]输出: True解释:你可以分割出这样两个连续子序列 :1, 2, 33, 4, 5示例 2:输入: [1,2,3,3,4,4,5,5]输出: True解释:你可以分割出这样两个连续子序列 :1, 2, 3, 4, 53

2020-12-04 10:56:56 378

原创 拼接最大数

给定长度分别为 m 和 n 的两个数组,其元素由 0-9 构成,表示两个自然数各位上的数字。现在从这两个数组中选出 k (k <= m + n) 个数字拼接成一个新的数,要求从同一个数组中取出的数字保持其在原数组中的相对顺序。求满足该条件的最大数。结果返回一个表示该最大数的长度为 k 的数组。说明: 请尽可能地优化你算法的时间和空间复杂度。示例 1:输入:nums1 = [3, 4, 6, 5]nums2 = [9, 1, 2, 5, 8, 3]k = 5输出:[9, 8, 6, 5

2020-12-02 11:12:32 189

原创 二分查找+位运算遍历完全二叉树(记住思路)

题目:给出一个完全二叉树,求出该树的节点个数。说明:完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。方法一:BFS/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *r

2020-11-24 10:03:46 192 1

原创 插入区间(hard,思路很重要)

题目: 给出一个无重叠的 ,按照区间起始端点排序的区间列表。在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。示例 1:输入:intervals = [[1,3],[6,9]], newInterval = [2,5]输出:[[1,5],[6,9]]示例 2:输入:intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8]输出:[[1,2],[3,10],[12,16]]

2020-11-04 09:00:29 139

原创 岛屿的周长(思路很重要,很经典)

题目:给定一个包含 0 和 1 的二维网格地图,其中 1 表示陆地 0 表示水域。网格中的格子水平和垂直方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表示陆地的格子相连组成的岛屿)。岛屿中没有“湖”(“湖” 指水域在岛屿内部且不和岛屿周围的水相连)。格子是边长为 1 的正方形。网格为长方形,且宽度和高度均不超过 100 。计算这个岛屿的周长。示例输入:[[0,1,0,0],[1,1,1,0],[0,1,0,0],[1,1,0,0]]输出: 16

2020-10-30 09:05:59 637

原创 前序遍历二叉树

题目:给定一个二叉树,返回它的 前序 遍历。示例:输入: [1,null,2,3]输出: [1,2,3]方法一:递归这是最容易想到且最容易实现的算法。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(

2020-10-27 09:34:15 106

原创 有多少小于当前数字的数字

题目:给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目。换而言之,对于每个 nums[i] 你必须计算出有效的 j 的数量,其中 j 满足 j != i 且 nums[j] < nums[i] 。以数组形式返回答案。提示:2 <= nums.length <= 5000 <= nums[i] <= 100方法一:暴力法class Solution {public: vector<int> smalle

2020-10-26 08:46:50 193

原创 判断回文链表(【快慢指针】+【翻转链表】)

题目:判断一个链表是否为回文链表(只有一个节点和没有结点的链表都是回文的)用O(n)时间复杂度和O(1)的空间复杂度解决思路:通过快慢指针将slow指针遍历至链表中间,遍历过程中,翻转前半部分。class Solution {public: bool isPalindrome(ListNode* head) { if(!head||!head->next) return true; ListNode* fast=head,*slow=head;

2020-10-23 09:03:09 137

原创 划分字母区间(贪心加双指针)

题目描述:字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段。返回一个表示每个字符串片段的长度的列表。样例:输入:S = “ababcbacadefegdehijhklij”输出:[9,7,8]解释:划分结果为 “ababcbaca”, “defegde”, “hijhklij”。每个字母最多出现在一个片段中。像 “ababcbacadefegde”, “hijhklij” 的划分是错误的,因为划分的片段数少。**思路:**首先我们需要记录字

2020-10-22 08:21:30 124

原创 秋叶收藏集(动态规划)

题目:现有一批只包含红色,黄色的混乱树叶集leaves,字符串leaves仅包含小写字符r和y,其中r表示一片红树叶,y表示一片黄树叶,现要将其整理成【红 黄 红】结构,每部分树叶数量可以不相等,但均须大于1。每次调整可以把红树叶换成黄树叶,也可以把黄树叶换成红树叶。求最少需要多少次调整才能将树叶调整完毕。思路:一.动态规划二.使用3个dp数组记录状态1. dp[o][i]代表从头开始全部修改成红色(纯红)需要修改几次2. dp[1][i]代表从头开始是红色,然后现在是黄色(红黄),需要修改几次

2020-10-11 09:27:49 330 1

原创 环形链表的判断(如有环,返回入环的第一个结点)

方法一:哈希表思路:从表头开始遍历每一个节点,并且存入set集合里,一旦遇到了此前碰到过的节点,就可以判定链表中存在环。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNo

2020-10-10 09:49:07 197

原创 迭代法后序遍历二叉树

递归法后序遍历二叉树后续遍历一颗二叉树即按照先后续遍历左子树,再后续遍历右子树,最后遍历根节点。因此整个遍历过程天然具有递归的性质,我们可以直接用递归函数来模拟这一过程。/** * 下面是二叉树的定义. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} *

2020-09-29 21:41:04 247

空空如也

空空如也

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

TA关注的人

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