自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 学生管理系统

数据结构作业,学生管理系统,需求:录入、保存一个班级学生多门课程的成绩,并对成绩进行分析。基本要求:(1)通过键盘输入各学生的多门课程的成绩,建立相应的文件input.dat;(2)对文件input.dat中的数据进行处理,要求具有如下功能:1.按各门课程成绩排序,并生成相应的文件输出;2 .计算每人的平均成绩,按平均成绩排序,并生成文件;3.求出各门课程的平均成绩、最高分、最低分、不及格人数、6069分人数、7079分人数、80~89分人数、90分以上人数;4.可根据姓名或学号查询某人的各门课成绩

2023-02-04 13:21:58 471 1

原创 心的感悟

a

2022-09-08 09:52:20 191 1

原创 最大正方体

这道题我们可以由暴力解法联想到动态规划暴力解法就是我们每当遍历到1时就求最大正方题的面积其实我们要求的时是最大正方体的最大边长,1.状态表示f【i,j】表示结尾为(i,j)的最大正方形的边长2.状态表示,这里我们可以从三个角度到f(i,j),从(i-1,j),(i,j-1),(i-1,j-1)从他们当中取最小值,然后加一,限制条件,f(i,j)以这个结尾的数为1,如果不是1,那么f(i,j)就直接为03.初始化:这里我们方便后面的初始化,我们从1开始遍历,比如f(1,1)如果(1,1..

2022-03-13 20:16:42 1478

原创 寻找峰值

这道题居然用二分可以做,可以算是一个特殊的题型我们每次二分一个中间数,1.当nums[mid]>nums[mid+1]时当左边一旦有下降趋势,或者一直递增到区间边界,这里我们题目规定了nums【0】之前的数为-无穷,所以我们左边一定有峰顶,2.当nums[mid]<nums[mid+1]同理说明再mid+1到区间边界一定有峰值class Solution {public: int findPeakElement(vector<int&g...

2022-03-11 20:12:41 180

原创 数组中重复的数

哈希表的简单应用,这里我们直接遍历一下数组,每次查询该数的次数是否为空,空则放入哈希表,不为空就代表找到重复的数了。class Solution {public: int findRepeatNumber(vector<int>& nums) { unordered_set<int>s; for(int i=0;i<nums.size();i++){ if(s.count(nums[i]))r...

2022-03-11 19:26:48 160

原创 岛屿数量

这道题再leetcode从来没写过,不过这道题时经典中的经典,flood fill算法我们简单的写下就可以了class Solution {public: vector<vector<char>>g; int dx[4]={0,0,1,-1}; int dy[4]={1,-1,0,0}; int numIslands(vector<vector<char>>& grid) { g=gri..

2022-03-11 19:09:10 123

原创 二叉树的锯齿形层次遍历

这就是二叉树的层序遍历只不过用一个变量来看是否来把每层读入的数组来翻转class Solution {public: vector<vector<int>> zigzagLevelOrder(TreeNode* root) { vector<vector<int>>res; queue<TreeNode*>q; if(root)q.push(root); .

2022-03-11 19:07:19 1119

原创 字符串相加

这道题就是高精度的问题,我们用两个vector函数来解决这个问题就行了,这里采用倒叙相加就行了,最后用高精度相加的式子,我们要从个位加起,也就是从0开始相加,到时候再倒叙相加就可以了也就是先倒叙,再从零开始相加再倒叙成字符串class Solution {public: string addStrings(string num1, string num2) { vector<int>a; vector<int>b; ...

2022-03-11 19:02:44 151

原创 数组中的第k个最大的元素

就是快排一下顺序,然后倒着求第k个数就可以了class Solution {public: void quick(vector<int>&nums,int l,int r){ if(l>=r)return; int q=nums[l+r>>1],i=l-1,j=r+1; while(i<j){ do i++;while(nums[i]<q);

2022-03-11 10:53:01 127

原创 每 日温度

这题是一个单调栈问题,要我们求出右边离他最近且比它大的数,这里我们单调栈里面存的是数组的下表,因为结果也要输出下表1..因为我们要求右边的数,所以我们要从后往前遍历2.而要求比他大的数,所以当我们遍历的当前数比栈顶的元素大时,将栈顶元素出栈,若还有元素,就将他存入到答案数组,3.最后将下表存入栈中class Solution {public: vector<int> dailyTemperatures(vector<int>& T) { ..

2022-03-09 14:56:50 75

原创 平衡二叉树

这里我们可以用递归函数专门用来求子树的高度,再用一个bool树来求进行递归如果子树的高度查大于1,就把他变为false,最后递归每次返回子树的高度为max(lh,rh)+1;class Solution {public: bool res=true; bool isBalanced(TreeNode* root) { dfs(root); return res; } int dfs(TreeNode*root){ if(!...

2022-03-08 13:30:37 136

原创 对称二叉树

对于二叉树是否对称,要比较的是根节点的左子树和右子树是不是相互翻转的,理解这一点就知道了其实我们要比较的是两个数(这两个数是根节点的左右子树)在递归遍历的时候要同时遍历两颗树class Solution {public: bool isSymmetric(TreeNode* root) { if(!root)return true;//如果根节点为空说明对称 queue<TreeNode*>q; q.push(root-&gt...

2022-03-08 12:50:16 537

原创 单调递增的数字

贪心:这道题和之前的一道题非常像,当我们整个数都是单调递增的时候,我们直接返回原数即可,当我们和这里还有个知识点,char类型的字符++,和--是会按字符+-;比如char a='9' ++a='10'而a+1就变为askll码的运算。class Solution {public: int monotoneIncreasingDigits(int n) { int k=0; auto a=to_string(n); ...

2022-03-07 20:42:40 89

原创 摆动序列

这道题的贪心策略,1.我们不允许有重复的数,如果有重复的数则不满足要求,因为相减为0;2.我们的序列要求是摆动序列, 我们其实只用保留序列前后末尾两个点和峰谷和峰顶。其他点我们都可以去掉。如果删除有点只有<=2的点,那么我们就直接返回nums.size()即可。class Solution {public: int wiggleMaxLength(vector<int>& nums) { nums.erase(uni...

2022-03-07 19:16:22 61

原创 K次取反后最大化的数组和

贪心策略:每次把绝对值大的负数,转化为整数,如果转换完后,k仍然大于0,那么只需要连续把最小的数,一直转换便可解题步骤:1.将数组按照绝对值从大到小排序,注意要按照绝对值的大小2.从前完后遍历,如果遇到负数将其变为正数,同时k--;3.如过k仍然大于0,那么翻转变为数值最小的元素,将k用完。4.求和排序判断函数,前面要加staticclass Solution {public:static bool cmp(int a,int b){ return ...

2022-03-07 16:56:20 92

原创 翻转二叉树

这道题同样可以用层序遍历,我们每次把所遍历的节点的儿子节点翻转就可以了。class Solution {public: TreeNode* invertTree(TreeNode* root) { queue<TreeNode*>q; if(root)q.push(root); while(q.size()){ int k=q.size(); while(k--){ ...

2022-03-05 15:21:40 103

原创 填充每个节点的下一个右侧节点指针2

这个题目1做的是完美二叉树,题目二是二叉树,但逻辑思维是一样的,同样代码也是一样的。class Solution {public: Node* connect(Node* root) { queue<Node*>q; if(root)q.push(root); while(q.size()){ int k=q.size(); Node* a; Nod..

2022-03-05 14:57:24 300

原创 填充每个节点的下一个右侧节点指针

这道题,我们只需要单层遍历的时候记录一下本层的头部节点,然后再遍历的时候让前一个节点指向本节点就可以了,这里我们再每次遍历每层的元素的时候可以先定义两个指针分别指前一个检点和当前节点,一次迭代就可以了class Solution {public: Node* connect(Node* root) { queue<Node*>q; if(root)q.push(root); while(q.size()){ ...

2022-03-05 14:54:22 284

原创 二叉树的最小深度

如图所示,我们要找二叉树的最小深度,我们最小深度的二叉树是没有左右儿子的,所以我们可以用这个为判断依据。class Solution {public: int minDepth(TreeNode* root) { queue<TreeNode*>q; if(root)q.push(root); int k=0; while(q.size()){ int n=q.size(); ...

2022-03-05 14:31:17 340

原创 二叉树的最大深度

这道题简单用一下层序遍历的模板便可以通过class Solution {public: int maxDepth(TreeNode* root) { queue<TreeNode*>q; if(root)q.push(root); int k=0; while(q.size()){ int n=q.size(); k++; while(n-...

2022-03-05 14:25:11 41

原创 在每个树行中找最大值

每次遍历每层元素之前,定义一个最小值m,比较每层中的元素大小,然后把m放入答案队列class Solution {public: vector<int> largestValues(TreeNode* root) { vector<int>res; queue<TreeNode*>q; if(root)q.push(root); while(q.size()){ ...

2022-03-03 19:49:15 47

原创 N叉树的层序遍历

这里我们有多个儿子节点,我们可以用这种方式来遍历所有的儿子节点for(auto c:t->chlidren)q.push(c)class Solution {public: vector<vector<int>> levelOrder(Node* root) { vector<vector<int>>res; queue<Node*>q; if(root)q.push..

2022-03-03 19:41:10 82

原创 二叉树的层平均值

层序遍历差不多,就用一个sum把每层的和加起来,然后除以元素个数就的处

2022-03-03 19:28:58 6935

原创 二叉树的右视图

这道题我们只需要把每层的最右边节点放入答案数组就可以了,也就是最后一个元素。class Solution {public: vector<int> rightSideView(TreeNode* root) { vector<int>res; queue<TreeNode*>q; if(root)q.push(root); while(q.size()){ int...

2022-03-03 16:57:53 109

原创 二叉树的层序遍历2

这个就是直接二叉树的层序遍历的答案神翻转一下即可因为这个k随着q的变化而变化,所以我们每次首先要求一下kclass Solution {public: vector<vector<int>> levelOrderBottom(TreeNode* root) { vector<vector<int>>res; queue<TreeNode*>q; if(root)q.pus...

2022-03-03 16:39:11 168

原创 二叉树的层序遍历

这道题用到了宽搜的思路1.创造答案数组,和宽搜的队列2.如果根节点为空,直接返回即可3.宽搜的步骤1.将根节点入列2.while循环为队列的中元素的数量3.记录队列里面的节点的个数k,进行k次扩展,创造个答案数组存入答案4.将扩展的点入队列4.将答案数组入答案数组。class Solution {public: vector<vector<int>> levelOrder(TreeNode* root) { ..

2022-03-03 16:31:39 185

原创 java构造方法

Java构造方法构造方法为:public 类名(){}没有返回值类型,也没有具体的返回值在创建对象的时候调用构造方法。

2022-02-28 21:06:18 173

原创 java重复的特点

重复操作不用太在意

2022-02-28 20:13:17 113

原创 Java继承的格式

子类也可以被当作父类父类的定义和普通的类定义是一样的子类的定义 要多一个extends 父类父类有的子类都有,子类可以调用父类里的方法

2022-02-28 20:09:32 127

原创 java继承的概念

java继承的概念就是师傅传授武功,把功夫毫无保留的给大徒弟和小徒弟,而且徒弟还可以有师傅没有的。也就是共性抽取继承有父亲的特性。

2022-02-28 20:02:25 169

原创 打家劫舍

这道题是一道经典的dp问题,我们

2022-02-16 19:38:20 205

原创 搜索二维矩阵2

搜索二维矩阵这道题相当于脑筋急转弯,知道怎么做就行了,ok思路:我们可以一开始把起始点设为右上角,这里我们可以分为三种情况1.t==target2.t>target,如果t>target,那么这一列我们都可以去掉,因为t这列下面的数都大于t3.t<target,如果t<target那么这一行都可以去掉。因为这一行t最大。步骤:1.先创建两个变量表示右上角点的坐标2.然后以点的坐标不能越界为循环的条件,开始循环3.以t表示坐标...

2022-02-15 20:58:50 177

原创 三数之和

这题运用了双指针的算法,那这里有三个数怎么使用双指针呢,我们可以先固定一个数i,然后双指针j和k。这题设计了去重的关键点:1.保证i<k<j,,为什么呢,这里举一个例子就知道了,比如说,i取-1,j取0,k取1. 我们如果不能满足条件那么就可以取 i取-1,j取1,k取0。这样是不是就重复了。2.如果i两次取的数一样那么也有重复比如数组为 1 1 1 1 1 1 -2;这里i取第一个1,和i取第二个1都是重复的,所以我们需要当i遍历到相同的数时直接跳过。思路:..

2022-02-15 19:49:32 104

原创 找到所有数组中消失的数字

我们可以直接对数组进行标记,如果出现过,我们可以把它转化为负数,如果为负数,那么就代表这个数常出现过,大于0就代表没出现过。步骤:1.遍历整个数组中的每个数,如果没有遍历过就乘以-1,这里数组下标代表数组中的每个数字注意:因为vector里的下标是从0到n-1,而数据范围是从1到n所以数到数组需要-1进去,然后有可能有点数会出现两次,所以要提前把当前遍历的数变为正数;2.遍历数组,如果有数组下表为正数,说明没有出现过,我们将i+1,存入数组。class Solution {pub..

2022-02-15 15:14:28 988

原创 买卖股票的美妙时期

遍历整个数组,偏离到第i个数时,找出前i-1个数的最小值,进行相减,更新股票的利润步骤1.创建两个变量,一个存储股票利润,一个存储前i-1的最小值2.遍历整个数组进行比较class Solution {public: int maxProfit(vector<int>& prices) { int res = 0,m=1e4+10; for(int i = 0;i < prices.size(); i++){ ...

2022-02-15 10:41:06 99

原创 只出现一次的数字

这题考察了异或的性质知识点:相同的数异或为0,因为这道题其他的元素都出现两次所以可以一直配对异或直到只剩下一个只出现一次的异或class Solution {public: int singleNumber(vector<int>& nums) { for(int i=1;i<nums.size();i++){ nums[0]^=nums[i]; } return nums[0]; }..

2022-02-12 19:59:39 214

原创 多数元素

这道题要我们找出一个数组中,数量过半的数,这题的做法项脑筋急转弯,直接记过就好这里我们定义两个变量,一个r存当前数,一个c是当前数的数量,接下来我们遍历整个数组,如果我们遍历的数和存的数相当,就让c+1,否则就让c-1,当c==0时就把存的数替换成但前遍历的数。步骤一:1.定义两个变量r,c.... r表示当前存的数,c表示当前存的数的数量2.遍历整个数组,如果c=0,就把当前数替换存的数2.如果当前数与存的数相等就让c++,否则让c--;class Solutio..

2022-02-12 19:44:51 6076

原创 链表中倒数第k格节点

步骤:1.先求链表的节点个数2.找倒数第k格数公式为,n+1-k,找到第n-k+1格点后,只用进行n-k次操作class Solution {public: bool hasCycle(ListNode *head) { if(!head||!head->next)return false; auto a=head,b=head->next; while(b){ a=a->next,b=b..

2022-02-11 15:55:36 53

原创 环形链表

这题用快慢指针,一个指向第一个点,一个指向第二个点,每次第一个指针走一步,第二个指针走两步,如果这个链表有环说明这两个指针可以相遇,如果没有环,说明第二个指针会达到空节点步骤:1.如果链表为空或者只有一个节点说明无环2.标记两个指针3.以第二个指针是否为空作为循环标准,每次先把两个指针往后移动一个,判断b是否为空后再移动一格,判断是否相等,相等就表示相遇返回true4.如果退出while循环表示第二个指针为空,返回falseclass Solution {public:..

2022-02-11 15:41:03 272

原创 反转链表

这是一道非常经典的题目知识点:当我们用到那几个点时可以提前用变量来存,省的麻烦auto a=head,b=a->next;我们链表题先要画图,将图画出来我们 就知道,这里我们交换反转节点一共要用到两个位置我们每次要用到前后两个节点,每次把后面一个节点的指针指向前面一个节点。然后将两个指针顺次移动一位,最后将首届点的下一个节点指向空节点,最后返回a即可。class Solution {public: ListNode* reverseList(ListN...

2022-02-11 09:38:33 491

空空如也

空空如也

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

TA关注的人

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