![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
刷题
leetcode、洛谷、牛客网刷题
糖FZ+L耗
一个在软硬件都徘徊却学不会的小咸鱼
展开
-
不定期的算法打卡1
1154.一年当中的第几天一年中的第几天 - 力扣(LeetCode) (leetcode-cn.com)//本道题的思路在于 需要统计本年 1 到 x月, x 月之前的天数 加上 本月 的天数// 那么还得注意闰年的区分,二月的判断。bool isLeepYear(int year){ return ( year % 4 == 0 && year % 100 || year % 400 == 0);}int strIn(char* str , int.原创 2022-04-25 22:29:51 · 389 阅读 · 0 评论 -
打卡算法十一
124.二叉树最大路径和力扣最优路径可以从两个地方得到,一个是经过根节点时,左子树最优+右子树最优+根节点;另一个是转化为子问题,将左右子树分别作为根节点来求解;难点在于递归的返回值和答案之间的关系;关于此类问题,一般是开一个全局变量来存储和更新答案;dfs只返回需要的值;在本题中,需要dfs返回的是该子树和根节点相连情况下的单条路径最优值;在计算过程中,更新答案为左右两边单条路径最优解+根节点组合为满足要求的路径;/** * Definition for a binary.原创 2022-04-19 02:57:50 · 264 阅读 · 2 评论 -
算法打卡十
1748.唯一元素的和唯一元素的和 - 力扣(LeetCode) (leetcode-cn.com)这道题也可以用哈希,但我用类似哈希的数组实现(实质也是哈希思想)这个有计数法的技巧:计数法的含义顾名思义,就是利用一个变量,记录下某个数值出现了多少次。从而实现对数值的计数。在这里,我们可以采用一个计数数组来完成这件事情。将nums数组的值 映射到 计数数组 的下标中,而数组值本身就对应了计数器的值。int sumOfUnique(int* nums, int numsSize.原创 2022-04-17 19:42:55 · 363 阅读 · 1 评论 -
算法打卡九
832.翻转图像832. 翻转图像 - 力扣(LeetCode) (leetcode-cn.com)这道题:我的思路很简单:它是需要2进制图像,那我可以异或,也可以直接用 1去解决(去取反嘛,我 1 - 1 =0(就实现了如果数组里边存储的是1,取反后就是0); 1 - 0 =1 (实现了数组里边存的是0,取反是1)然后,逆序其实如果你这么看: mage...原创 2022-04-16 22:12:13 · 433 阅读 · 0 评论 -
每日打卡算法九
算法打卡九链接:link64.求1 + 2 + 3 + 4+…+n这道题:可以说是诸神乱战,天神秀操作的题本质上他是经典问题出新意,加了许多限制条件class Solution { public: int sumNums(int n) { return n == 0 ? 0 : n +sumNums(n-1); //这道题,我用递归操作,三目运算符 } };大神题解:class Solution { public: int sumNums(int n) { return sizeof(bool原创 2022-04-15 20:13:45 · 316 阅读 · 1 评论 -
每日打卡八
509斐波那数列. 斐波那契数 - 力扣(LeetCode) (leetcode-cn.com)class Solution {//模板题: 用for遍历数组,注意数列的边界条件,然后以数列递推公式直接干public: int fib(int n) { int fib[31]; fib[0] = 0 , fib[1] = 1; for(int i = 2;i <= n; ++i) { fib[i] = fib[i - 1] + .原创 2022-04-14 19:08:46 · 302 阅读 · 0 评论 -
算法打卡第七天
231.2的幂https://leetcode-cn.com/problems/power-of-two///这种方法是关于幂的通解 暴力模拟class Solution {public: bool isPowerOfTwo(int n) { while(n && n %2 ==0) { n /=2; } return n == 1; }};/*位运算解法:判断奇...原创 2022-04-13 20:21:24 · 519 阅读 · 3 评论 -
算法打卡6
2042.检查句子中的数字是否递增力扣原创 2022-04-12 03:56:44 · 347 阅读 · 0 评论 -
每日打卡6
2032.至少在两个数组中出现的值力扣简单题,读题,然后暴力模拟就行int* twoOutOfThree(int* nums1, int nums1Size, int* nums2, int nums2Size, int* nums3, int nums3Size, int* returnSize){ int *ret = (int *)malloc( sizeof(int) * 300 );//三个数组每个数组100长度,那么一共300 int i, j; int原创 2022-04-08 21:48:36 · 239 阅读 · 1 评论 -
每日打卡五
2043.简易银行系统日常生活知识,值得练基本功class Bank { //定义一个银行 vector<long long> b;public: Bank(vector<long long>& balance) { b.clear(); b.push_back(-1); //日常初始化 //存入账户 for(int i=0;i < balance.siz原创 2022-04-07 11:02:52 · 305 阅读 · 1 评论 -
每日打卡算法(4)
2047.句子中有效单词数力扣思路:暴力枚举各个思路,直接干class Solution { // bool isNumeric(char c) { return c >= '0' && c <= '9'; } bool isSpace(char c) { return c == ' '; } bool isCombine(char c) { return c =原创 2022-04-06 19:44:50 · 392 阅读 · 0 评论 -
每日打卡算法
2057. 值相等的最小索引力扣int smallestEqual(int* nums, int numsSize){ int i; for(i=0;i < numsSize ;++i) { if( i % 10 == nums[i] ) return i; } return -1;}2064.分配给商店的最多商品 的最小值力扣思路:“我希望x越小越好,即我 想最小化分配给任意商店...原创 2022-04-05 10:21:59 · 1085 阅读 · 0 评论 -
每日算法打卡二
队列力扣【2073. 买票需要的时间 】typedef struct{ int index; int need;}Q;int timeRequiredToBuy(int* tickets, int ticketsSize, int k){ Q q[50000] , temp ; int i; int time = 0; int front = 0 , rear = 0; //存储票 for(i=0; i <原创 2022-04-04 19:43:29 · 242 阅读 · 0 评论 -
学习算法打卡(一)
滚动数组是动态规划中的一种思想,用固定的几个空间去迭代寻找解,以起到压缩空间的效果。当然,他也因此牺牲了时间上的效率。滚动数组详解_哔哩哔哩_bilibili一维的滚动数组,说白了DP题目是一个自底向上的扩展过程,我们只需要的是最终的结果的话,对过程的连续的解不需要的话,滚动数组优化是很有效的。利用滚动数组的话在N很大的情况下可以达到压缩存储的作用。是 也是优化版本的斐波那数列的操作。比如说在这我们就可以拿斐波那数列来举例子,这里我们只需要开辟dp[0] 、 dp[1]、...原创 2022-04-03 14:19:07 · 588 阅读 · 0 评论 -
回溯算法基础一
理论基础回溯,其实是递归的“副产品”。有递归就会有相应的回溯过程。而回溯的本质是穷举,所以他并不是高效的算法。它可以理解为树形结构。他解决问题的操作是在集合中递归寻找子集。而集合的大小就是构成树的宽度,递归的深度构成了树的深度。回溯法可以解决的问题: 1.组合问题 2.切割问题 3.子集问题 ...原创 2022-03-30 20:47:24 · 300 阅读 · 1 评论 -
字符串专题二
找出数组中的第一个回文字符串力扣学习博客: xLeetCode 2108. 找出数组中的第一个回文字符串_回文字符串的判定为了减少时间的复杂度: 用类似二分的思想: 第一个 和 最 后 一 个 字母判断; 第二个 和 倒数第二个 字母判断是否相等...... 通过枚举字符串的一半来判断,一旦不相等即不是回文。bo...原创 2022-03-30 17:23:48 · 161 阅读 · 0 评论 -
字符串专题___简单基础篇
力扣反转字符串 (简单题)class Solution {public: //双指针法,参考反转链表思想 void reverseString(vector<char>& s) { for(int i=0,j = s.size() - 1;i < s.size()/2 ;i++,j--) { swap(s[i],s[j]); } }};力扣...原创 2022-03-27 10:52:10 · 1235 阅读 · 1 评论 -
树的专题三
树的最大深度104. 二叉树的最大深度 - 力扣(LeetCode) (leetcode-cn.com)/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * Tre.原创 2022-03-26 11:06:29 · 1100 阅读 · 0 评论 -
算法学习五
寻找峰值力扣x的平方根力扣这道题的思路什么呢: 即 这便是题解的一个边界判断条件 那么我们怎么去寻找y呢?可以考虑二分查找二分查找 的下界为 0 ,上界可以粗略地设定为x 。在二分查找的每一步中,我们只需要比较中间元素mid 的平方与x的大小关系,并通过比较的结果调整上下界的范围。由于我们所有的运算都是整数运算,不会存在误差。。209. 长度...原创 2022-03-26 22:01:55 · 842 阅读 · 2 评论 -
leetcode简单题
力扣得到零的操作数(递归)class Solution {//(1) 如果num1或者num2本身就是0的情況,直接返回0 ;// (2) 否则,把两者中小的那个叫min,大的那个叫max ,// 那么返回的应该是递归调用 max-min和min的情况 。public: int countOperations(int num1, int num2) { //若X是“0”(为假),则“!x”就不是零(为真), //则里面为真,进入if下的大{}.原创 2022-03-21 19:49:12 · 528 阅读 · 0 评论 -
树的练习2
二叉树的层序遍历力扣/** *这道题的思路在于:* 二叉树的层序遍历是: 根 左 右 一层一层往下遍历* 我们需要借助一个辅助的数据结构——队列来实现这个目的* 为什么呢?因为队列先入先出刚好符合我们 一层一层往下遍历的需求* 所以的操作流程大概是: 根节点 询问根节点的左孩子 再询问根节点的右孩子* 一层遍历完,接下来访问根节点左孩子的左孩子,再访问它的右孩子......**原创 2022-03-20 23:29:46 · 308 阅读 · 0 评论 -
三月算法(三)-----树的习题(1)
二叉树创建字符串606. 根据二叉树创建字符串 - 力扣(LeetCode) (leetcode-cn.com)class Solution {public: // 这道题我的思路是 看题: 如果是 左右子树都存在的话,自然是都是有括号(字符)(字符) // 但:如果左节点不存在: 就是 ()( 字符 ) // 右节点不存在,就是 ( 字符 ) string tree2str(TreeNode* root) { if(ro原创 2022-03-19 23:25:18 · 320 阅读 · 0 评论 -
三月算法(二)
力扣有效字母的异位词class Solution { //使用哈希表,对字符串的字母进行投影 // a b c ..... // 0 1 2 // 投影完后,所采用的的就是ASCI码,字母相同就相约(一个++,另一个--) // 最后为零就是说明两个字符串当中的会存在某个字母出现次数相同,即符合要求public: bool isAnagram(string s, string t) { int record[26]=.原创 2022-03-18 23:02:21 · 394 阅读 · 0 评论 -
三月入门算法第一期
算法零基础积累原创 2022-03-17 00:33:52 · 918 阅读 · 1 评论 -
算法基础(二)
本节是关于二分查找的学习蒜头君手上有个长度为nn的数组AA。由于数组实在太大了,所以蒜头君也不知道数组里面有什么数字,所以蒜头君会经常询问整数xx是否在数组AA中。输入格式第一行输入两个整数nn和mm,分别表示数组的长度和查询的次数。接下来一行有nn个整数a_iai。接下来mm行,每行有11个整数xx,表示蒜头君询问的整数。输出格式对于每次查询,如果可以找到,输出"YES",否则输出"NO"。数据范围1 \le n, m \le 1...原创 2022-02-06 15:36:43 · 539 阅读 · 0 评论 -
复习算法基础(一)
/*呜呜呜我要逼自己打代码,不能再偷懒了呜呜呜*/快速排序快速排序时间复杂度快速排序的时间复杂度在最坏情况下是O(N2),平均的时间复杂度是O(N*lgN)。这句话很好理解:假设被排序的数列中有N个数。遍历一次的时间复杂度是O(N),需要遍历多少次呢?至少lg(N+1)次,最多N次。(01) 为什么最少是lg(N+1)次?快速排序是采用的分治法进行遍历的,我们将它看作一棵二叉树,它需要遍历的次数就是二叉树的深度,而根据完全二叉树的定义,它的深度至少是lg(N+1)。因此,快速排序的遍历次数最少是lg原创 2022-01-27 20:34:12 · 841 阅读 · 1 评论