自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 力扣:64. 最小路径和

1、记忆化搜索状态设计,grid[i][j]表示走到该格最小路径和。状态转移方程, grid[i][j]+=min(grid[i-1][j],grid[i][j-1])class Solution {public: int minPathSum(vector<vector<int>>& grid) { int row=grid.size(); int col=grid[0].size(); fo...

2021-11-22 23:22:10 355

原创 力扣:747. 至少是其他数字两倍的最大数

1、遍历一次找到第一第二大的数再进行判断即可class Solution {public: int dominantIndex(vector<int>& nums) { int thesize=nums.size(); int max1=-1,max2=-1,mi=0; for(int i=0;i<thesize;++i) { if(nums[i]>max1) ...

2021-11-22 20:56:02 524

原创 力扣:75. 颜色分类

1、来个简简单单的冒泡排序class Solution {public: void sortColors(vector<int>& nums) { int thesize=nums.size(); for(int i=0;i<thesize-1;++i) { bool sign=true; for(int j=thesize-1;j>i;--j) ...

2021-11-22 20:38:24 569

原创 力扣:292. Nim 游戏

1、经典的巴什博弈这里解释一下为什么是这样的因为一次可以拿1~3颗,而且每个人都想赢。那么如果n为4的倍数,那不管先手的拿多少个,后手的都可以拿一定数量的石子,使得剩余的石子依旧是4的倍数,比如先手拿2个,那么后手可以也拿两个,此时剩余的石子为n-4,且4|(n-4),所以最终必然是后手赢。当n不是4的倍数时,先手则可以通过取走一定量的石子使得剩余的石子变成4的倍数,然后和上面同理,接下来无论后手怎么拿,先手都可以通过拿一定数量的石子使得剩余的石子为4的倍数,所以最后必然是先手赢...

2021-11-21 22:05:03 3123

原创 力扣:300. 最长递增子序列

1、首先,用一个数组mins去记录各个长度子序列的最小结尾数。用cnt记录mins的最大下标,也就是当前最长子序列的长度减一;那么一开始肯定有cnt=0,mins[0]=nums[0];然后去遍历数组nums,在数组mins中用二分找到大于等于nums[i]的数的最小值,然后替换它,如果找到的数为mins数组中最后一个数mins[cnt],且nums[i]>mins[cnt],则mins[++cnt]=nums[i]。也就是最长的子序列长度加一,因为nums[i]比当前最长的...

2021-11-21 20:51:07 453 2

原创 力扣:63. 不同路径 II

1、由于它有障碍,并且障碍在数组中表示为1,那么我们可以用每个格obstacleGrid[i][j]去存储走到当前格的路径数加一,那么要得到路径数,只要将格子中的数减一即可,而有障碍的格子中的数为1,减去1则为0,所以不再影响递推的结果。先初始化第一行和第一列,从开始位置到遇到边界或者遇到障碍之间的格子都填充2,因为只能往右往上走,所以都只有一条路径到达这里,如果遇到障碍,那么障碍后的所有格子填充1,表示到达这些格子的路径数为0;然后根据状态转移方程:obstacleGrid[i][j]=...

2021-11-21 19:54:57 237

原创 力扣:62. 不同路径

1、用nums[i][j]表示到达格子(i,j)的路径数。由于机器人只能向下或者向右走,所以有状态转移方程nums[i][j]=nums[i-1][j]+nums[i][j-1]进行初始化,nums[0][j]和nums[i][0]均为1;优化,降维,因为每次状态转移只用到了上一行同列的数和同行上一列的数,所以可以用一个一维数组表示,降维后状态转移方程为nums[i]=nums[i]+nums[i-1]class Solution {public: int unique...

2021-11-20 23:22:51 238

原创 力扣:876. 链表的中间结点

1、简单做法先求链表长度,然后求出中点,返回中间结点即可。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int ...

2021-11-20 23:05:53 391

原创 力扣:21. 合并两个有序链表

1、另开链表的做法/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : v...

2021-11-20 22:57:25 161

原创 力扣:1721. 交换链表中的节点

1、双指针做法先求出链表长度,再分别找到要交换值的结点。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x...

2021-11-20 22:39:18 90

原创 力扣:面试题 02.04. 分割链表

1、双指针做法用big指针找到第一个大于或等于x的结点,然后从big所指结点去寻找第一个小于x的结点然后交换两个结点的值,以此类推。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {pu...

2021-11-20 22:14:27 85

原创 力扣:面试题 02.02. 返回倒数第 k 个节点

1、双指针做法/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: int kthToLast(ListNode* head, int k) { ListNode..

2021-11-20 22:02:42 202

原创 力扣:61. 旋转链表

1、简单做法(勉强算双指针吧)/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *ne...

2021-11-20 21:50:37 79

原创 力扣:24. 两两交换链表中的节点

1、简单做法,双指针注意点:①注意链表头的位置,因为第一个结点和第二个结点转换后应该以第二个结点为头②注意前一次转换与后一次转换之间不是互相独立的,所以得注意他们之间的关系③注意没有或仅一个结点的特殊情况。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nu...

2021-11-20 21:23:57 333

原创 力扣:42. 接雨水

1、超时双指针做法class Solution {public: int trap(vector<int>& height) { int thesize=height.size(); int cnt=0,l=0,r=thesize-1; while(l<r) { while(l<r&&height[l]==0) ++l; ...

2021-11-20 20:54:48 417 3

原创 力扣:45. 跳跃游戏 II

1、分析题目,由于要求跳跃次数最少,那就说明了要尽量使每次跳跃的目的位置为所能跳跃的范围最大的位置。一开始从下标为0开始跳,那么每次跳跃前得先判断当前位置所能跳到的所有位置的跳跃极限。比如,一个数组 2,3,1,4,5,6那么一开始nums[0]为2,那他可以跳到数字3和数字1那里,那么跳到数字3还是跳到数字1更好呢,那么就要先比较比较。如果跳到数字3,那么它下一次跳跃的范围将是数字1到数字5,而如果跳到数字1,那么它下一次跳跃只能到数字4,所以跳到数字3的话下一次跳跃的范围包括了...

2021-11-20 20:06:26 2643

原创 力扣:55. 跳跃游戏

·1、简单做法class Solution {public: bool canJump(vector<int>& nums) { int thesize=nums.size(); int max=0; bool* can=new bool[thesize]; memset(can,0,thesize*sizeof(bool)); can[0]=1; for(int ...

2021-11-19 23:45:03 2746

原创 力扣:11. 盛最多水的容器

1、简单做法,分别从两端去找比它大的第一个点,并且在寻找的过程中做一定的限制。class Solution {public: int maxArea(vector<int>& height) { int thesize=height.size(); int max=0,other; for(int i=0;i<thesize;++i) { other=thesize-1...

2021-11-19 22:24:44 477

原创 力扣:1227. 飞机座位分配概率

1、其实这道题有点小巧妙首先排除特殊情况,只有一位乘客,此时,他只能坐自己的位置,所以返回1。如果第一位乘客坐了自己的位,那么由题意可以知道第n位乘客必然是能坐在自己的座位上。现在再来看第一位乘客坐错了位置。那么我们可以认为第一位乘客所坐的就是第二位乘客的位置。或许有人问,为什么呢?这里解释一下。如果第一位乘客坐的是第三位乘客的位置,那么第二位乘客就必然能坐在自己的位置上,此时第二位乘客的存在与结果之间没有任何联系,那么我们是否就可以假设没有这第二位乘客和他的那个位置呢?答...

2021-11-19 21:34:45 687

原创 力扣:1332. 删除回文子序列

1、由于它只有两种字符,所以最多只能是二次,所以其实就是判断是不是回文字符串的问题,是则返回1,不是则返回2.class Solution {public: int removePalindromeSub(string s) { int i=0,j=s.size()-1; while(i<j) { if(s[i]!=s[j]) return 2; else ...

2021-11-15 22:37:43 282

原创 力扣:剑指 Offer II 019. 最多删除一个字符得到回文 或 680. 验证回文字符串 Ⅱ

1、暴力做法,直接判断class Solution {public: bool validPalindrome(string s) { int i=0,j=s.size()-1; while(i<j) { if(s[i]!=s[j]) { if(s[i+1]!=s[j]&&s[i]!=s[j-1]) return false;...

2021-11-15 22:27:32 197

原创 力扣:面试题 01.04. 回文排列

1、哈希表做法class Solution {public: bool canPermutePalindrome(string s) { int cnt=0; int hash[256]={0}; for(int i=0;s[i];++i) ++hash[s[i]]; for(int i=0;i<256;++i) if(hash[i]&1) ++cnt; if(cnt>1) return ..

2021-11-15 21:40:45 221

原创 力扣:345. 反转字符串中的元音字母

1、双指针做法class Solution {public: string reverseVowels(string s) { int i=0,j=s.size()-1; while(i<j) { while(i<j&&s[i]!='a'&&s[i]!='e'&&s[i]!='i'&&s[i]!='o'&&s[i]!='u'&..

2021-11-14 19:38:27 360

原创 力扣:2000. 反转单词前缀

1、二指针做法class Solution {public: string reversePrefix(string word, char ch) { int i,j=0; char tmp; for(i=0;word[i];++i) if(word[i]==ch) break; if(word[i]=='\0') return word; else { ...

2021-11-14 19:24:35 409

原创 力扣:1832. 判断句子是否为全字母句

1、哈希表做法class Solution {public: bool checkIfPangram(string sentence) { bool hash[26]={0}; for(int i=0;sentence[i];++i) hash[sentence[i]-'a']=true; for(int i=0;i<26;++i) if(!hash[i]) return false; return true;...

2021-11-13 20:19:19 209

原创 力扣:剑指 Offer II 032. 有效的变位词

1、哈希表做法class Solution {public: bool isAnagram(string s, string t) { if(s.size()!=t.size()) return false; bool flag=false; int hash[26]={0}; for(int i=0;s[i];++i) if(s[i]!=t[i]) { ...

2021-11-13 20:15:09 193

原创 力扣:面试题 01.02. 判定是否互为字符重排

1、哈希表做法class Solution {public: bool CheckPermutation(string s1, string s2) { if(s1.size()!=s2.size()) return false; int hash[256]={0}; for(int i=0;s1[i];++i) { ++hash[s1[i]]; --hash[s2[i]];..

2021-11-13 20:07:54 80

原创 力扣:剑指 Offer 50. 第一个只出现一次的字符

1、哈希表做法class Solution {public: char firstUniqChar(string s) { int hash[256]={0}; for(int i=0;s[i];++i) ++hash[s[i]]; for(int i=0;s[i];++i) if(hash[s[i]]==1) return s[i]; return ' '; }};

2021-11-13 20:02:52 210

原创 力扣:面试题 01.01. 判定字符是否唯一

1、哈希表做法class Solution {public: bool isUnique(string astr) { int cnt[256]={0}; for(int i=0;astr[i];++i) ++cnt[astr[i]]; for(int i=0;i<256;++i) if(cnt[i]>=2) return false; return true; }};...

2021-11-13 19:58:27 219

原创 力扣:674. 最长连续递增序列

1、用cnt记录当前连续递增的长度,max记录当前最大的连续递增长度,迭代一遍数组即可。class Solution {public: int findLengthOfLCIS(vector<int>& nums) { int max=0,cnt=1,thesize=nums.size(); for(int i=1;i<thesize;++i) { if(nums[i]>nums[i-...

2021-11-12 23:03:16 68

原创 力扣:104. 二叉树的最大深度

1、深度优先搜索做法/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(..

2021-11-12 23:03:03 815

原创 力扣:111. 二叉树的最小深度

1、深度优先搜索做法/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), rig...

2021-11-12 23:02:50 818

原创 力扣:551. 学生出勤记录 I

1、按题目要求判断即可,用acnt记录A的个数,用lcnt记录连续L的个数。class Solution {public: bool checkRecord(string s) { int acnt=0,lcnt=0; for(int i=0;s[i];++i) { if(s[i]=='A') { ++acnt; if(ac...

2021-11-12 23:02:16 54

原创 力扣:961. 重复 N 次的元素

1、简单做,排序,寻找相同的数。class Solution {public: int repeatedNTimes(vector<int>& nums) { int thesize=nums.size(); sort(nums.begin(),nums.end()); for(int i=1;i<thesize;++i) if(nums[i]==nums[i-1]) return nums[i]; ...

2021-11-12 23:02:02 367

原创 力扣:LCP 06. 拿硬币

1、超级简单,就是每次尽可能拿两个,拿不了两个就拿一个。class Solution {public: int minCount(vector<int>& coins) { int sum=0,thesize=coins.size(); for(int i=0;i<thesize;++i) { if(coins[i]&1) sum+=coins[i]/2+1; else..

2021-11-12 23:01:30 112

原创 力扣:2057. 值相等的最小索引

1、简单做class Solution {public: int smallestEqual(vector<int>& nums) { int thesize=nums.size(); for(int i=0;i<thesize;++i) if(i%10==nums[i]) return i; return -1; }};

2021-11-12 23:01:18 86

原创 力扣:2042. 检查句子中的数字是否递增

1、声明tmp1和tmp2去记录前后两个数。然后去遍历数组读取其中的数字即可。class Solution {public: bool areNumbersAscending(string s) { int i=0,tmp1=0,tmp2=0,thesize=s.size(); while(i<thesize) { if(s[i]<='9'&&s[i]>='0') ...

2021-11-12 23:00:05 112

原创 力扣:1784. 检查二进制字符串字段

1、不大懂这题目的意思,大概就是全部'1'都要连在一起则返回true,否则返回false,而且它第一位必然是'1'。class Solution {public: bool checkOnesSegment(string s) { for(int i=1;s[i];++i) { if(s[i]=='1'&&s[i-1]=='0') return false; } return ...

2021-11-12 21:09:54 177

原创 力扣:1816. 截断句子

1、用cnt去记录空格数,每个空格代表有一个单词。class Solution {public: string truncateSentence(string s, int k) { int cnt=0,i=0,thesize=s.size(); char* news=new char[thesize+1]; while(s[i]) { news[i]=s[i]; if(...

2021-11-12 20:51:33 145

原创 力扣:203. 移除链表元素

1、用一个指针circu指向头结点,用circu去遍历链表,当circu->next的val值为val时,则删掉circu的next结点。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(...

2021-11-11 09:39:03 526

空空如也

空空如也

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

TA关注的人

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