自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 InvalidIndexError: (slice(None, None, None), None)

使用plot画图报错InvalidIndexError: (slice(None, None, None), None)

2022-11-18 15:21:38 2067 1

原创 将字典排序后返回的不是字典

字典排序问题

2022-11-18 15:13:07 223

原创 pandas concat “InvalidIndexError: Reindexing only valid with uniquely valued Index objects

InvalidIndexError: Reindexing only valid with uniquely valued Index

2022-11-18 15:06:57 892

原创 反转一个单链表

题目 给反转一个单链表 示例 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL分析 一个节点一个节点的反向指,需要注意的就是当当前节点的next为null时,此时是最后一个节点,为反转后的 头结点。using namespace std;struct ListNode{ ListNode* next; int val; ListNode() :next(nullptr),

2020-11-12 19:42:30 101

原创 二叉树展开为链表

题目如题分析一.递归其实仔细观察例子是一个先序遍历。先遍历到左子树最后一个节点,然后将左子树放到右子树位置,同时左子树置null将原来右子树放到左子树的的最右节点。然后一层一层往上重复,到了根节点就完成了。二.非递归非递归其实是从上往下展开。将从根节点开始判断,如果根节点的左子树不为空,则将左子树移到右子树的位置,同时根节点的左子树置null。然后将右子树放到左子树的右节点,然后再判断当前节点的左子树,重复上述操作。解法1:递归 void flatten(TreeNode* root)

2020-11-12 19:42:18 66

原创 二叉树层次遍历

题目如题分析 第一层的下标其实就是0,level其实就是层数,level确认把每个数字放入对应的层里, 其实这种思想是一种BFS思想解法1:递归#include<stdio.h>#include<iostream>#include<stdlib.h>#include<vector>#include<queue>using namespace std;struct TreeNode{ int val; TreeNod

2020-11-12 19:42:05 77

原创 插入排序

分析将数组第一个元素认为是已经排序过的。外层循环是控制待排序的元素,内层循环是在有序序列中进行插入。 而且比较也是从认为是有序序列的最后一个元素开始比较,即待排序元素的前一个。#include<stdio.h>#include<vector>using namespace std;class MyClass{public: vector<int> sortArray(vector<int>& nums) { for (int j

2020-11-10 20:30:28 96

原创 不含有重复字符的最长子串

题目给定一个字符串,请你找出其中不含有重复字符的?最长子串?的长度示例1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是?“wke”,所以其长度为 3。请注意,你的答案必须是 子串 的长度,“pwke”?是一个子序列,不是子串分析1.也是先

2020-11-10 20:30:16 231

原创 删除指定元素并返回删除后数组个数

题目给定一个数组 nums?和一个值 val,你需要原地移除所有数值等于val的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。示例2:给定 nums = [0,1,2,2,3,0,4,

2020-11-10 20:30:04 863

原创 删除重复元素

#include<iostream>#include<stdlib.h>#include<vector>using namespace std;class MyClass{public: int removeDuplicates(vector<int>& nums) { if (nums.size() == 0) { return 0; } int j, i; j = i = 0; for (i = 1

2020-11-04 20:27:08 105

原创 字符串转换整数

题目请你来实现一个atoi函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字

2020-11-04 20:26:53 157

原创 字符串相乘

题目给定两个以字符串形式表示的非负整数num1和num2,返回num1和num2的乘积,它们的乘积也表示为字符串形式。示例 1:输入: num1 = “2”, num2 = “3”输出: “6”示例2:输入: num1 = “123”, num2 = “456”输出: “56088”说明:num1和num2的长度小于110。num1和num2只包含数字0-9。num1和num2均不以零开头,除非是数字0本身。不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为

2020-11-01 10:10:37 100

原创 字符串解码

题目给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像3a或2[4]的输入。示例 1:输入:s = “3[a]2[bc]”输出:“aaabcbc”示例 2:输入:s = “3

2020-11-01 10:10:22 386

原创 字符串的排列

题目输入一个字符串,打印出该字符串中字符的所有排列。你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。示例:输入:s = “abc”输出:[“abc”,“acb”,“bac”,“bca”,“cab”,“cba”]限制:1 <= s 的长度 <= 8分析 1.因为题目所给数组存在重复,并且要求结果去重所以选set保存,最后返回的时候返回vector 2.算法核心其实就是dfs也可以说是回溯法 3.因为有set可以保证没有重复所以每次交换后需要重新恢复位置 4.

2020-10-28 15:28:09 76

原创 重构字符串

题目给定一个字符串S,检查是否能重新排布其中的字母,使得两相邻的字符不同。若可行,输出任意可行的结果。若不可行,返回空字符串。示例1:输入: S = “aab”输出: “aba”示例 2:输入: S = “aaab”输出: “”void main(){string s1=“aab”;MyClass a;cout << a.reorganizeString(s1) << endl;system(“pause”);分析1.大的思路就是先判断这个是不是支持重

2020-10-28 15:27:56 196

原创 至少有k个重复字符的最长子串

题目找到给定字符串(由小写字符组成)中的最长子串 T ,?要求?T?中的每一字符出现次数都不少于 k 。输出 T?的长度。示例 1:输入:s = “aaabb”, k = 3输出:3最长子串为 “aaa” ,其中 ‘a’ 重复了 3 次。 示例 2: 输入: s = "ababbc", k = 2 输出: 5 最长子串为 "ababb" ,其中 'a' 重复了 2 次, 'b' 重复了 3 次。分析首先是统计每个字母出现的次数,然后根据要求k来调整滑窗的边界。滑窗边界初次调整

2020-10-28 15:27:40 311

原创 有效的数独

题目判断一个9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。数字?1-9?在每一行只能出现一次。数字?1-9?在每一列只能出现一次。数字?1-9?在每一个以粗实线分隔的?3x3?宫内只能出现一次。上图是一个部分填充的有效的数独。数独部分空格内已填入了数字,空白格用?’.’?表示。示例?1:输入:[[“5”,“3”,".",".",“7”,".",".",".","."],[“6”,".",".",“1”,“9”,“5”,".",".","."],[".",

2020-10-25 11:50:53 64

原创 验证平衡二叉树

#include<vector>#include<cmath>#include<algorithm>using namespace std;struct TreeNode{ int val; TreeNode* right; TreeNode* left; TreeNode() :val(0), right(nullptr), left(nullptr){}};class MyClass{public: bool isBalanced(Tr

2020-10-25 11:50:15 119

原创 验证二叉搜索树

题目给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例1:输入:2/ 1 3输出: true示例2:输入:5/ 1 4? / ? 3 6输出: false解释: 输入为: [5,1,4,null,null,3,6]。根节点的值为 5 ,但是其右子节点值为 4 。‘分析 1.首先需要确认被验证的

2020-10-25 11:49:44 61

原创 验证二叉树

题目二叉树上有 n个节点,按从0到 n - 1编号,其中节点i的两个子节点分别是leftChild[i]和rightChild[i]。只有 所有 节点能够形成且 只 形成 一颗有效的二叉树时,返回true;否则返回 false。如果节点i没有左子节点,那么leftChild[i]就等于-1。右子节点也符合该规则。注意:节点没有值,本问题中仅仅使用节点编号。示例 1:输入:n = 4, leftChild = [1,-1,3,-1], rightChild = [2,-1,-1,-1]输出:tr

2020-10-25 11:49:17 160

原创 根据后序中序构造二叉树

#include<iostream>#include<vector>using namespace std;struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {}};class MyClass{public: TreeNode *buildTree(vector<int>

2020-10-24 12:48:46 130

原创 旋转图像

题目你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。示例 1:给定 matrix =[[1,2,3],[4,5,6],[7,8,9]],原地旋转输入矩阵,使其变为:[[7,4,1],[8,5,2],[9,6,3]]示例 2:给定 matrix =[[ 5, 1, 9,11],[ 2, 4, 8,10],[13, 3, 6, 7],[15,14,12,16]],原地旋转输入矩阵,使其变为:[[15,13, 2, 5]

2020-10-24 12:47:21 110

原创 顺时针打印矩阵

#include<iostream>#include<vector>using namespace std;class MyClass{public: vector<int> spiralOrder(vector<vector<int>>& matrix) { vector<int> res; if (matrix.empty()){ return res; } int endRow =

2020-10-24 12:46:54 43

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

#include<unordered_map>#include<vector>using namespace std;class MyClass{public: vector<int> singleNumbers(vector<int>& nums){ vector<int> res; if (nums.size() <= 0){ return res; } unordered_map<in

2020-10-23 11:04:30 48

原创 生命游戏

题目如果活细胞周围八个位置的活细胞数少于两个,则该位置活细胞死亡;如果活细胞周围八个位置有两个或三个活细胞,则该位置活细胞仍然存活;如果活细胞周围八个位置有超过三个活细胞,则该位置活细胞死亡;如果死细胞周围正好有三个活细胞,则该位置死细胞复活;根据当前状态,写一个函数来计算面板上所有细胞的下一个(一次更新后的)状态。下一个状态是通过将上述规则同时应用于当前状态下的每个细胞所形成的,其中细胞的出生和死亡是同时发生的。示例:输入:[? [0,1,0],? [0,0,1],? [1,1,

2020-10-23 11:04:11 82

原创 删除链表的倒数第N个节点

题目给定一个链表,删除链表的倒数第?n?个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n?保证是有效的。分析 1.首先因为删除的是要求的倒数第k个,所以说我们需要知道一共有多少个元素。 2.考虑异常情况以及删除第一个节点 3.注意被删除的节点需要置nullptr#include<iostream>usin

2020-10-23 11:03:52 38

原创 冒泡排序

分析冒泡排序是相邻元素互相比较,然后最大或者最小的放在最后面。外层是需要待排序比较的数字。内层比较,通过层层比较将最小或者最大的数字放在最后。之所以减1,因为内层是当前与当前数字下一个进行比较,所以减1是避免越界。减i的目的是已经排序的不用比较。#include<iostream>#include<stdlib.h>#include<vector>using namespace std;class MyClass{public: void swa

2020-10-22 10:33:45 81

原创 接雨水

题目给定n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。示例:图略,其中所给数组是柱子的高度输入: [0,1,0,2,1,0,1,3,2,1,2,1]输出: 6分析 1.首先使用双指针法,这样可以一次搞定。如果左边元素值比右边元素值小,则从左边元素开始计算。 反之,则从右边元素开始计算。同时需要左右各维

2020-10-22 10:33:28 32

原创 合并区间

题目输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例?2:输入: [[1,4],[4,5]]输出: [[1,5]]解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。分析首先根据所给用例,找出解题关系。1.因为题目给的序列不一定有序的,所以我们需要先将序列排序,左边界按照升序排序,左边界如果相等,右边界按照降序排列。2.排好序后,

2020-10-16 09:27:00 59

原创 合并二叉树

#include<iostream>using namespace std;struct TreeNode{ int val; TreeNode* right; TreeNode* left; TreeNode(int a) :val(a), right(nullptr), left(nullptr){}};class MyClass{public: TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) { if (!t

2020-10-16 09:26:46 40

原创 归并排序

#include<vector>#include<stdlib.h>#include<iostream>using namespace std;class MyClass{public: void mergeSort(vector<int>& data, vector<int>& res, int start, int end){ if (data.empty() || res.empty()){ ret

2020-10-13 23:28:35 33

原创 股票最大利润

题目假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。示例 2:输入: [7,6,4,3,1]输出: 0解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。限制:0 <= 数组长度 &l

2020-10-13 23:25:04 160

原创 二叉树深度

分析加1是因为首先进来,需要先加一层,这一层是根节点也可以理解是上一层的高度计数这种是递归方式class MyClass{public: int maxDepth(TreeNode* root) { if (!root){ return 0; } int leftDepth = maxDepth(root->left); int rightDepth = maxDepth(root->right); return max(leftDepth, right

2020-10-09 17:45:48 159

原创 LRU缓存机制

题目:运用你所掌握的数据结构,设计和实现一个LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果关键字 (key) 存在于缓存中,则获取关键字的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字/值」。当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据值,从而为新的数据值留出空间。进阶:你是否可以在O

2020-10-08 20:51:04 40

原创 前k个高频元素

题目给定一个非空的整数数组,返回其中出现频率前?k?高的元素。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]提示:你可以假设给定的?k?总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。你的算法的时间复杂度必须优于 O(n log n) ,?n?是数组的大小。题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的。你可以按任意顺序返回答案。分析 使

2020-10-08 20:49:55 56

原创 罗马字符串转换成整数

题目罗马数字包含以下七种字符:?I,?V,?X,?L,C,D?和?M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做?II?,即为两个并列的 1。12 写做?XII?,即为?X?+?II?。 27 写做??XXVII, 即为?XX?+?V?+?II?。通

2020-10-08 20:49:30 151

原创 堆排序

分析 1.首先整个排序过程分为两部分:第一,是将所给数据变成最大堆的形式。第二,交换数据。变成最大堆后, 数组第一个元素总是最大的,然后将st[0],st[10]交换,交换后此时再将st[0]~st[9]变成最大堆,然后再 交换数据,以此类推。 2.堆结构,当前节点的左子节点下标是2*i+1,右子节点下标为2*i+2;节点的父节点是i/2-1;并且一般来说 堆都是完全二叉树 3.堆排序的时间复杂度是O(N*lgN)。假设被排序的数列中有N个数。 遍历一趟的时间复杂度是O(N),

2020-10-08 20:49:03 71

原创 岛屿数量

题目给你一个由?‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例 1:输入:11110110101100000000输出:1示例2:输入:11000110000010000011输出: 3解释: 每座岛屿只能由水平和/或竖直方向上相邻的陆地连接而成。分析 1.使用dfs 2.需要一个同样大小的二维网格来记录,深度遍历过程

2020-10-08 20:48:46 38

原创 单词搜索

题目给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例:board =[[‘A’,‘B’,‘C’,‘E’],[‘S’,‘F’,‘C’,‘S’],[‘A’,‘D’,‘E’,‘E’]]给定 word = “ABCCED”, 返回 true给定 word = “SEE”, 返回 true给定 word = “ABCB”, 返回 false

2020-10-08 20:48:27 42

原创 希尔排序

分析这个是插入排序的加强板。唯一不同的就是希尔排序不是直接进行插入排序。是进行按照整数gap一个增量,将文件进行分组。然后对这个gap按照规律递减,直到gap=1。注意gap是需要小于数组总长度的。按照gap分组,然后每组进行直接插入排序。和插入排序区别:当N值很大时数据项每一趟排序需要的个数很少,但数据项的距离很长。 当N值减小时每一趟需要和动的数据增多,此时已经接近于它们排序后的最终位置。 正是这两种情况的结合才使希尔排序效率比插入排序高很多。 希尔排序通过将比较的全部元素分为几个区域来提

2020-10-05 14:33:05 49

空空如也

空空如也

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

TA关注的人

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