- 博客(83)
- 收藏
- 关注
原创 时针,分针重合时刻 c++
输入现在的时刻,计算出time和time+1之间,时针和分针重合的时刻,要求。2.输出 介于0:00~23:59的时间。假设当前是a时b分,则。1.输入 0~23之间的整数,例如2。
2023-03-27 18:10:26
880
原创 时针和分针重合时刻
1~12h 每一小时分针和时针都会重合一遍,而0~1h内,时针和分针不会重合,也就是说,在完整的12小时内,分针和时针只会重合11次。时针:时针每分钟走整个钟面的360/12=30°,1小时转30度。30/60=0.5°所以时针每分钟转0.5°。输入现在的时刻,计算出time和time+1之间,时针和分针重合的时刻,要求。分针:分针每分钟走整个钟面的360/60=6°,所以分针每分钟转6°。2.输出 介于0:00~23:59的时间。1.输入 0~23之间的整数,例如2。
2023-03-27 18:08:14
1487
原创 JZ26 树的子结构
题目链接:树的子结构_牛客题霸_牛客网注意点:1.先在树A中找到值为树B根节点的值的节点,然后判断这个节点的子树是否含有和树B一样的结构。第一步中,查找与根节点值一样的节点,采用递归的方法来遍历树。 第二步中,同样采用递归的方法,判断判断当前对应节点是否相同,然后递归判断左、右节点,递归终止条件是到达了叶节点。2.原书解法为递归的思想,我用的是非递归的/*struct TreeNode { int val; struct TreeNode *left; struct Tre
2022-04-27 15:10:51
294
原创 JZ7 重建二叉树
题目链接:重建二叉树_牛客题霸_牛客网注意点:找到前序遍历的根节点,然后再确定中序遍历中根节点的左右子树。切割空间的范围用的是分治法,按照左开右闭的原则,多写多调试吧。/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL)
2022-04-26 16:37:21
117
原创 JZ54 二叉搜索树的第k个节点
题目链接:二叉搜索树的第k个节点_牛客题霸_牛客网注意点:中序遍历的模板,中旬遍历的顺序是左根右/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * }; */class Solution {public: /**
2022-04-26 14:31:08
1839
原创 JZ77 按之字形顺序打印二叉树
注意点:每一层都村早vector中,反转不会破坏二叉树的结构/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {public: vector<vector<i
2022-04-26 12:53:36
96
原创 JZ55 二叉树的深度
题目链接:二叉树的深度_牛客题霸_牛客网注意点:1.队列的应用:每一层的头节点先如队列,再弹出作为队头,后续入队的均为左右孩子,弹出层数2.队列:C++队列queue用法详解_KEPROM的博客-优快云博客_c++ queue2.官方推荐的递归:分治法,左右递归找到最深的节点层数,求出最大的在+1(根节点)目录方法一:队列方法二:递归方法一:队列/*struct TreeNode { int val; struct TreeNode *left;
2022-04-24 18:41:38
1333
原创 JZ18 删除链表的节点
题目链接:删除链表的节点_牛客题霸_牛客网注意点:删除的链表节点需要先保存一下,然后再连接上下一位free删除的节点/** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : val(x), next(nullptr) {} * }; */class Solution {public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回
2022-04-24 12:56:19
1188
原创 347. 前 K 个高频元素(c++)
给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]提示:1 <= nums.length <= 105k 的取值范围是 [1, 数组中不相同的元素的个数]来源:力扣(LeetCode)链接:https://leetcode-cn.com/pr.
2022-04-23 12:24:38
741
原创 JZ76 删除链表中重复的结点
题目链接:删除链表中重复的结点_牛客题霸_牛客网注意点:1.考虑头节点重复,所以构造虚拟头节点1.方法一参考了评论区:申请两个指针的pre和cur,pre指向cur的前一个节点,cur指向当前节点,如果cur和cur->next的val想等,就循环找出所有重复节点的末尾,然后pre跳到不重复的节点上即可,时间和空间复杂度都是O(n)。2.方法二:哈希去重,记录每个节点出现的次数,大于1的指向下一个节点目录方法一:双指针方法二:哈希方法一:双指针/*s
2022-04-22 17:40:00
269
原创 JZ35 复杂链表的复制
题目链接:复杂链表的复制_牛客题霸_牛客网注意点:主要是考虑新旧节点的对应关系,以及random为空或者指向自己的情况/*struct RandomListNode { int label; struct RandomListNode *next, *random; RandomListNode(int x) : label(x), next(NULL), random(NULL) { }};*/class Solutio
2022-04-22 16:20:53
425
原创 JZ22 链表中倒数最后k个结点
题目链接:链表中倒数最后k个结点_牛客题霸_牛客网注意点:1.暴力查找:首先求链表长度len,如果小于k,就返回空,不小于k,走len-k不,得出的就是k个位置及后的元素2.快慢指针:慢指针指向头节点,快指针先走k步,大于链表长度返回空,如果快指针走到尾,慢指针指向的就是k个节点。目录方法一:暴力查找方法二:快慢指针方法一:暴力查找/** * struct ListNode { * int val; * struct ListNode *next; *
2022-04-22 13:00:48
530
原创 JZ23 链表中环的入口结点
注意点:1.首先想到的时快慢指针的,先判断链表是否有环,快指针比慢指针多走两步,如果发现环,让其中一个指针指向头节点,快指针和慢指针都是挪动一步,再次相遇遇到的就是环的入口2.set保存链表每一个节点的地址,如果出现第一个重复的就是环的入口方法一:快慢指针/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }
2022-04-19 21:59:53
332
原创 JZ52 两个链表的第一个公共结点
题目链接:1.常规做法:考虑两个链表的长度不一致,需要让长的那个先走abs(链1长度-链2长度)-,同步后两个指针第一个相等的就是公共节点2.官方建议:的一种思路是可以将两个链表连起来形成一个环,所以两个指针走的路一样,当p1的指针走到尾部后,从p2开始遍历。但是我总感觉这么做的话,如果没有公共节点可能会死循环,想法很妙,鲁棒性差一些方法一(常规做法)/*struct ListNode { int val; struct ListNode *next; ListNode(i
2022-04-19 16:23:29
672
原创 JZ25 合并两个排序的链表
题目链接:合并两个排序的链表_牛客题霸_牛客网注意点:1.选取新的链表头2.合并前两个链表状态的判断3.合并时一个链表已经为空的情况/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* Merge(ListNode* pHead1, ListNode
2022-04-18 14:09:05
149
原创 JZ24 反转链表
题目链接:反转链表_牛客题霸_牛客网注意点:1.可以设置两个节点用来存储链表的前一个节点和后一个节点2.如果不保存下一个节点,当前节点反转后,下一个节点位置就找不到了,所以反转前要保存当前节点的下一个节点/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode
2022-04-18 12:43:07
197
原创 JZ6 从尾到头打印链表
题目链接:从尾到头打印链表_牛客题霸_牛客网注意点:1.返回值时一个数组,考虑最后的结果用vector存储起来2.如果使用reverse,会造成链表结构的修改,需提前询问面试官是否可以2.链表的应用class Solution {public: vector<int> printListFromTailToHead(ListNode* head) { stack<ListNode*> nodes; ListNode*
2022-04-17 20:32:57
372
原创 HJ3 明明的随机数(c++)
题目链接:明明的随机数_牛客题霸_牛客网注意点:1.选取set较为合适 :C++ ——一文读懂:STL库set_华山令狐冲、的博客-优快云博客_c set集合2.插入时候set的有点多了,不用if去判断,直接st.insert就可以#include <iostream>#include <set>using namespace std;int main(){ int n; while (cin >> n){ set&
2022-04-15 21:59:08
818
原创 C++ vector内存分配及正确释放
谈到vector的内存分配,首先要知道size()和capacity()方法的区别。前者求的是实际的vector元素个数,后者求的是实际占用内存的个数,一般来说,申请的内存capacity()是大于或等于size()的1.清空vector的元素:clear()2.释放内存:clear() +shrink_to_fit() 或 swap()1.clear()1.使用clear()不会真正释放内存,capacity()无变化#include <iostream>#i.
2022-04-14 18:35:52
26655
7
原创 HJ94 记票统计(c++)
题目链接:记票统计_牛客题霸_牛客网注意点:1.用的暴力求解,坑也不少,在遍历循环的时候要注意边界条件2.用pair类型的vector去存候选人的名字,票数初始化为03.时间复杂度时 O(mn),空间复杂度O(1);因为票数为常量不超过100#include<iostream>#include<vector>using namespace std;int main(){ int n; int tol = 0; string p
2022-04-14 18:02:36
253
原创 HJ97 记负均正(c++)
题目链接:记负均正_牛客题霸_牛客网注意点:注意1.for循环 ,i是从1开始2.小数点后1位的保存#include <iostream>#include <iomanip>using namespace std;int main(){ int n; while (cin >> n){ int sum = 0; //大于0的个数 int cnt = 0; //
2022-04-14 17:59:14
212
原创 HJ108 求最小公倍数(c++)
题目链接:求最小公倍数_牛客题霸_牛客网注意点:1.最小公倍数一定是较大数的倍数2.所以用暴力法去做的话,可以从最大的数开始,找到第一个可以整除的数据就是最小公倍数#include <iostream>using namespace std;int main(){ int m , n; while (cin >> m >> n){ for(int i = max(m,n); ; ++i){
2022-04-13 21:47:56
564
原创 HJ106 字符逆序(c++)
题目链接:字符逆序_牛客题霸_牛客网注意点:reverse的头文件是algorithm#include <iostream>#include <string>#include <algorithm>using namespace std;int main(){ string str, res; while (getline(cin ,str)){ reverse(str.begin(), str.end());
2022-04-13 21:21:54
523
原创 HJ101 输入整型数组和排序标识,对其元素按照升序或降序进行排序(c++)
题目链接:输入整型数组和排序标识,对其元素按照升序或降序进行排序_牛客题霸_牛客网注意点:某个靓仔的vector排序讲的好:C++ vector容器的排序 (从小到大,从大到小)_Rosita.的博客-优快云博客_vector容器排序#include <iostream>#include <vector>#include <algorithm>using namespace std;int main(){ int n; whi
2022-04-13 21:11:26
408
原创 HJ102 字符统计(c++)
题目链接:字符统计_牛客题霸_牛客网注意点:1.最适合选取的是map或者unordered_map2.依据本题的意思,sort排序无法对相同字符的数据进行排序#include <iostream>#include <vector>#include <map>#include <algorithm>using namespace std;bool cmp(pair<char, int> a, pair<char
2022-04-13 14:21:16
313
原创 HJ100 等差数列(c++)
题目链接:等差数列_牛客题霸_牛客网#include <iostream>using namespace std;int main(){ int n; while (cin >> n){ //做差的第一个元素 int tmp = 2; int sum = 0; for(int i = 0; i < n; i++){ sum += tmp;
2022-04-12 22:47:05
409
原创 HJ99 自守数(c++)
题目链接:自守数_牛客题霸_牛客网注意点:参考了评论区大佬的方法,简洁易懂1.首先0必定是自守数,算作初始为1。我们可以遍历1到n验证每个数i是否是自守数。2.如果它是自守数,那么i^2对i这么多位零的整十整百或者整千整万数取余就会得到i本身3.我们可以在遍历的时候初始取模为10,每当i等于模将其扩大十倍即可。#include <iostream>using namespace std;int main(){ int n ; int tmp =
2022-04-12 22:29:29
803
原创 HJ96 表示数字(c++)
题目链接:表示数字_牛客题霸_牛客网注意点:1.考虑用栈来处理,如果是数字就弹出,如果连续的数字需要判断2.方法二参考了其他人的方法,正则表达式C++正则表达式(匹配、搜索、替换)_神奇的小强的博客-优快云博客_c++正则匹配#include <iostream>using namespace std;int main(){ string str; string res; while(getline(cin, str)){ int i =
2022-04-10 22:15:16
443
原创 HJ87 密码强度等级(c++)
题目链接:密码强度等级_牛客题霸_牛客网注意点:这道题的坑比较多1.大小写字符都包含的情况:lowletter && upletter,只要字母存在lowletter || upletter2.判断小写:islower,判断大写isupper(); 判断数字isdigit();3.奖励机制问题,注意题干要求只能选择一种以大优先,所以if的判断顺序只能从大到小#include<iostream>#include<string>using
2022-04-08 15:26:50
1110
原创 HJ91 走方格的方案数(c++)
注意点:经典动态规划问题#include<iostream>#include<vector>using namespace std;int main(){ int n, m; while (cin >> n >> m){ //表示第i和j列为止的方案数 //如果这里不好理解,可以改完 /* typedef longlong size_dp;
2022-04-08 15:24:56
1202
原创 1544. 整理字符串
题目链接:力扣方法一:字符串直接对比前后两位#include<iostream>#include<cstring>using namespace std;class Solution {public: string makeGood(string s) { //使用for循环遍历s字符串,由于中间会有删除操作会影响下标值,因此省略步长的操作 for(int i=0;i<s.size();)
2022-04-07 22:30:16
367
原创 HJ85 最长回文子串(c++)
题目链接:最长回文子串_牛客题霸_牛客网注意点:1.采用中心拓展法2.需要注意的是中心的数据可能是一个字符也可能是两个字符,所以需要比较这两种情况下最大的回文串#include<iostream>#include<string>using namespace std;//判断最长的回文数int longestPalindrome(string &s, int left, int right){ while(left >=0 &am
2022-04-07 16:14:12
733
原创 HJ84 统计大写字母个数(c++)
题目链接:统计大写字母个数_牛客题霸_牛客网#include<iostream>#include<cstring>#include<cctype>using namespace std;int main(){ string str; int cnt = 0; while (getline(cin,str)){ for(int i = 0; i < str.size(); ++i){ if
2022-04-07 13:02:41
517
原创 HJ83 二维数组操作(c++)
题目链接:二维数组操作_牛客题霸_牛客网注意点:没理解题意#include<iostream>using namespace std;int main(){ int m,n; while(cin >>m>>n){ if(m > 9 || n > 9) cout <<-1<<endl; else cout <<0 << endl; in
2022-04-07 12:43:19
473
原创 HJ81 字符串字符匹配(c++)
题目链接:字符串字符匹配_牛客题霸_牛客网注意点:1.set本身就是去重,且自动升序排序2.unordered_set没有顺序,但去重3.boolalpha:C++学习笔记之---boolalpha_杨鑫newlfe的博客-优快云博客#include<iostream>#include <string>#include<unordered_set>using namespace std; int main(){ strin.
2022-04-06 17:55:21
342
原创 HJ80 整型数组合并(c++)
题目链接:整型数组合并_牛客题霸_牛客网注意点:set容器的特性:1.采用inset()方法把元素插入到集合中,插入规则在默认的比较规则下,是按元素值从小到大插入2、set集合中没有重复的元素#include<iostream>#include<set>using namespace std;int main(){ //m第一个数组长度,n第二个数组长度 int m,n; set<int> set; //输
2022-04-06 17:20:16
519
原创 HJ76 尼科彻斯定理(c++)
题目链接:尼科彻斯定理_牛客题霸_牛客网注意点:数学规律,每一个奇数的第一个数据都等于m * m - (m - 1)#include<iostream>using namespace std;int main(){ int m; while(cin >> m){ int first = m * m - (m - 1); cout << first; //输出第一个节点后的每个奇数 .
2022-04-06 16:47:24
290
原创 HJ73 计算日期到天数转换(c++)
题目链接:计算日期到天数转换_牛客题霸_牛客网注意点:闰年: 能被4整除,不能被100整除。 能被4整除,也能被400整除。#include <iostream>using namespace std;int main(){ int year,month,day; cin >>year>>month>>day; int data[13] ={0,31,28,31,30,31,30,31,31,30,31,30,3
2022-04-06 16:25:48
395
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人