- 博客(110)
- 资源 (2)
- 收藏
- 关注
原创 leetcode1114. 按序打印 靡不有初,鲜克有终,小白加油加油加油
我们提供了一个类:public class Foo { public void first() { print("first"); } public void second() { print("second"); } public void third() { print("third"); }}三个不同的线程 A、B、C 将会共用一个 Foo 实例。一个将会调用 first() 方法一个将会调用 second() 方法还有一个将会调用 third() 方法请设计修改程序,以确
2021-10-05 14:43:20
233
原创 leetcode33. 搜索旋转排序数组
整数数组 nums 按升序排列,数组中的值 互不相同 。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。给你 旋转后 的数组 nums 和一个整数 ta
2021-09-22 14:37:40
193
原创 leetcode206. 反转链表
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]迭代法:class Solution {public: ListNode* reverseList(ListNode* head) { ListNode* first = nullptr; ListNode* second = head; while (second != nullptr) {
2021-09-21 22:19:11
210
原创 leetcode21 合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。传统法子:class Solution {public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { ListNode* tempHead = new ListNode(0); ListNode* tempNode = tempHead; while (l1 && l2)
2021-09-21 22:03:24
191
原创 LEETCODE54. 螺旋矩阵
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]解题:我自己方法,如果是奇数的行列,在判断嘛class Solution {public: vector<int> spiralOrder(vector<vector<int>>& matrix) { vector&
2021-09-19 22:42:46
82
原创 剑指offer34 二叉树中和为某一个值的路径
输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。示例:给定如下二叉树,以及目标和 target = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \7 2 5 1返回:[ [5,4,11,2], [5,8,4,5]]解:回溯回溯注意叶子节点得加上才能,判断:class Solution {vect
2021-09-19 22:01:35
85
原创 leetcode9. 回文数 回去回去,飞不动了
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。示例 1:输入:x = 121输出:true示例 2:输入:x = -121输出:false解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入:x = 10输出:false解释:从右向左读, 为 01 。因此它不是一个回文数。示例 4:输
2021-09-18 23:28:22
213
原创 leetcode7. 整数反转
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。示例 1:输入:x = 123输出:321示例 2:输入:x = -123输出:-321示例 3:输入:x = 120输出:21示例 4:输入:x = 0输出:0解法,用队列接着,进行反转(其实不用队列也行,直接接过来数就进行 10)。主要是超
2021-09-18 22:49:55
76
1
原创 leetcode5. 最长回文子串 冲鸭冲,倒计时4天
给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = "babad"输出:"bab"解释:"aba" 同样是符合题意的答案。示例 2:输入:s = "cbbd"输出:"bb"示例 3:输入:s = "a"输出:"a"示例 4:输入:s = "ac"输出:"a"结题思路1:暴力解法,超时两次循环,找到最长的子串class Solution {public: string longestPalindrome(string s) {
2021-09-18 22:05:57
82
原创 leetcode4. 寻找两个正序数组的中位数 feifeifei
给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。示例 1:输入:nums1 = [1,3], nums2 = [2]输出:2.00000解释:合并数组 = [1,2,3] ,中位数 2示例 2:输入:nums1 = [1,2], nums2 = [3,4]输出:2.50000解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5示例 3:输入:nums1 = [0,0], n
2021-09-18 10:00:31
116
1
原创 leetcode3 无重复字符的最长子串
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s = "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: s = "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: s = "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwk
2021-09-18 09:59:14
99
1
原创 leetcode2 两数相加
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.解题思路:两个链表从头到尾进行两两相加,超过10就通过 sum/10 来进行进位,sum%10来作为新的节点值。即核心代码 in
2021-09-18 09:53:38
192
原创 leetcode01 两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。解题思路:遍历数组,将数组中的元素 和 位置放到map中保
2021-09-17 15:54:55
115
1
原创 牛客网输入
#include <iostream>#include <string>#include <vector>#include <map>#include <sstream>using namespace std;int main (){ //1、输入一行数字,以空格、.、为分割 (但是末尾不能有 ,这种符号) /*int n; vector<int> myarray; while (cin >> n)
2021-09-15 17:10:06
125
原创 回溯回溯,组合问题
//1、组合问题:数组中的元素不可重复选,返回所有子集。输入:nums = { 2,3,5 };输出:{[2],[2,3],[2,3,5][2,5][3,],[3,5],[5]}class Solution {public: vector<vector<int>> result; vector<int> path; vector<vector<int>> combinationSum2(vector<int&g
2021-09-14 22:12:47
78
原创 回溯回溯,排列问题
//1、排列问题:数组中和为8的元素,一个元素可重复选。输入:nums = { 2,3,5 }; target = 8;输出:{[2,2,2,2],[2,3,3],[3,2,3],[3,3,2],[3,5],[5,3]}class Solution {public: vector<vector<int>> result; vector<int> path; vector<vector<int>> combination
2021-09-14 21:48:45
87
原创 vector、map容器删除某个元素
vector<int> candidates = { 1,2,3,4,5};for (vector<int>::iterator iter = candidates.begin(); iter != candidates.end(); ) { if (*iter == 3) { iter = candidates.erase(iter); //erase 函数返回值是指向被删除元素的下一个元素的迭代器 } else { ++iter; }//erase 函数返回
2021-09-14 11:29:51
371
原创 剑指offer12,矩阵中的路径 冲鸭
给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。例如,在下面的 3×4 的矩阵中包含单词 “ABCCED”(单词中的字母已标出)。示例输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E",
2021-09-07 20:05:58
70
原创 十大排序算法2 简单选择排序
#include <iostream>#include <algorithm>#include <vector>using namespace std;void quickSort(vector<int>& array) { for (int i = 0; i < array.size(); i++) { int min = i; for (int j = i; j < array.size(); j++) { i
2021-09-01 10:47:42
87
原创 十大排序算法1 冒泡排序法
#include <iostream>#include <algorithm>#include <vector>using namespace std;void BubbleSort(vector<int> &array) { bool flag = true; for (int i = 0; flag && (i < array.size()); i++) { flag = false; for (int
2021-09-01 10:35:59
70
原创 十大排序6 归并排序
将一个大的无序数组有序,我们可以把大的数组分成两个,然后对这两个数组分别进行排序,之后在把这两个数组合并成一个有序的数组。由于两个小的数组都是有序的,所以在合并的时候是很快的。 通过递归的方式将大的数组一直分割,直到数组的大小为 1,此时只有一个元素,那么该数组就是有序的了,之后再把两个数组大小为1的合并成一个大小为2的,再把两个大小为2的合并成4的 … 直到全部小的数组合并起来。 算法思想:1、把长度为n的输入序列分成两个长度为n/2的子序列;2、对这两个子序列分别采用归并排序...
2021-09-01 09:23:38
75
原创 十大排序算法5 堆排序
过程:1、数组可以看成层序遍历的一颗二叉树,先将二叉树转化为大顶堆形式的二叉树(也就是数组重新排个序)2、对大顶堆的二叉树进行操作,将顶堆和尾部相交换,顶堆最大的数据就拿出来放在数组最后了。再将剩下的n - 1重新排成大顶堆形式,重复递归操作。代码:#include <iostream>#include <vector>using namespace std;class solution {public: void heapSort(vector<int&
2021-08-31 15:44:42
64
原创 十大排序4 希尔排序
希尔排序可以说是插入排序的一种优化,采取跳跃分割的方式,将相距某个**“增量”**的记录组成一个子序列,进行插入排序,这样得到的结果是基本有序的。再逐渐的缩小增量,直至增量为1;注意点:1、用个do - while循环, while (increment > 1); 为了最后一次循环increment = 1;2、初始增量 设为 n / 3 + 1;(也可以别的),放在while循环里3、类似与插入排序,这边得从自身i开始,所以得 a[j + increament ] = a...
2021-08-31 10:59:36
124
原创 十大排序3 直接插入排序 冲鸭冲
直接插入排序的思想:在一个已经有序的小序列的基础上,一次插入一个元素。从末尾开始找,找到它应该插入的位置。要点:1、从数组第二个元素开始(默认第一个为排好序了)2、从末尾开始找,比它大的元素就向后移动一个3、找到它的位置,插入。C++代码:#include <iostream>#include <vector>using namespace std;void insertSort(vector<int> &array) { for (in
2021-08-31 09:37:57
79
原创 剑指 Offer 13. 机器人的运动范围 好几天没有发CSDN了
地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子解:深度优先:class Solution {public: int movingCoun
2021-08-23 08:48:28
73
原创 二叉树17 合并二叉树
给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点输入: Tree 1 Tree 2 1 2
2021-08-19 16:15:36
86
原创 二叉树16 从中序与后序遍历序列构造二叉树
根据一棵树的中序遍历与后序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出中序遍历 inorder = [9,3,15,20,7]后序遍历 postorder = [9,15,7,20,3]返回如下的二叉树: 3 / \ 9 20 / \ 15 7解:和 前序 + 中序 = 后序一样,纸老虎class Solution {public: unordered_map<int, int> ordermap;
2021-08-19 15:58:14
123
原创 二叉树15 路径总和 II 冲鸭冲
给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。叶子节点 是指没有子节点的节点。输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22输出:[[5,4,11,2],[5,8,4,5]]解:和上一个题一样,只不过需要都遍历一次,所以回溯函数的返回值就设为void了。回溯回溯,永远滴神class Solution {public:
2021-08-19 14:55:11
76
原创 二叉树14 .路径总和 冲鸭冲
给你二叉树的根节点 root 和一个表示目标和的整数 targetSum ,判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。叶子节点 是指没有子节点的节点。输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22输出:true解:如果需要搜索整颗⼆叉树,那么递归函数就不要返回值,如果要搜索其中⼀条符合条件的路径,递归函数就需要返回值,因为遇到符合条件的路径了就要
2021-08-19 10:37:58
83
原创 二叉树11 N 叉树的最大深度 刷刷刷
给定一个 N 叉树,找到其最大深度。最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例)。示例 1:输入:root = [1,null,3,2,4,null,5,6]输出:3解:上个题一毛一样1、迭代“class Solution {public: int maxDepth(Node* root) { if(!root) return 0; queue<Node *&g
2021-08-19 10:03:31
76
原创 二叉树13 完全二叉树的节点个数
给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。输入:root = [1,2,3,4,5,6]输出:6、1、迭代,直接数个数class Solution {public: int countNodes(TreeNode* root) { if(!root)
2021-08-19 10:03:07
465
原创 二叉树12 二叉树的最小深度 整理
给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。输入:root = [3,9,20,null,null,15,7]输出:2解:class Solution {public: int minDepth(TreeNode* root) { if (!root) return 0; int leftdepth = minDepth(root -> left);
2021-08-19 10:02:33
203
原创 二叉树11 二叉树的最大深度(迭代、递归) 一会洗个澡去
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度 3解:1、递归yydsclass Solution {public: int maxDepth(TreeNode* root) { if (root == nullptr) { r
2021-08-19 10:01:59
113
原创 二叉树10 对称二叉树(递归 、 迭代)冲
一天最多发10篇,存个草稿明天发给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3解:递归法:得需要一个辅助的函数:class Solution {public: bool isSymmetric(TreeNode* root) { return isbool(root -> left, root -> right); } boo
2021-08-19 10:01:33
90
翻译 二叉树9 翻转二叉树 (迭代 和 递归) 冲
翻转一棵二叉树。示例:输入: 4 / \ 2 7 / \ / \1 3 6 9输出: 4 / \ 7 2 / \ / \9 6 3 1解:1、没有void的递归,哈哈,我终于写出来了没有void的了,加深理解的第一步class Solution {public: TreeNode* invertTree(TreeNode* root) { if (!root) {
2021-08-19 10:00:51
73
原创 二叉树8 在每个树行中找最大值 感觉今天刷不完了,好多
给定一棵二叉树的根节点 root ,请找出该二叉树中每一层的最大值。输入: root = [1,3,2,5,3,null,9]输出: [1,3,9]解释:1/ 3 2/ \ \5 3 9解:注意: int的最小值为INT_MIN最大值为INT_MAXclass Solution {public: vector<int> largestValues(TreeNode* root) { vector<int> result
2021-08-18 15:45:15
74
原创 二叉树7 N 叉树的层序遍历 今天得冲完二叉树
给定一个 N 叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)。树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)输入:root = [1,null,3,2,4,null,5,6]输出:[[1],[3,2,4],[5,6]]解:注意子树变成了个数:node -> child.size()每一个子树:node -> child[i]class Solution {public: vector<vector<int>>
2021-08-18 15:36:42
116
原创 二叉树6 二叉树的层平均值 冲
给定一个非空二叉树, 返回一个由每层节点平均值组成的数组。输入:3/ 9 20/ 15 7输出:[3, 14.5, 11]解释:第 0 层的平均值是 3 , 第1层是 14.5 , 第2层是 11 。因此返回 [3, 14.5, 11] 。解:直接在层序遍历的基础上杀class Solution {public: vector<double> averageOfLevels(TreeNode* root) { //vector<d
2021-08-18 15:12:49
73
原创 二叉树5 二叉树的右视图 冲
会了层序遍历,感觉这将是一场屠杀,所有层序的题直接在原有的基础上改题目:给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。输入: [1,2,3,null,5,null,4]输出: [1,3,4]解:直接层序遍历,每一层只留最后一个值就好了注释的部分是我一开始写的,其实也行class Solution {public: vector<int> rightSideView(TreeNode* root) {
2021-08-18 15:03:09
193
ODBC5.3 (32位 和 64位都有)
2020-06-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人