![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
思维
巴巴多斯小魔
这个作者很懒,什么都没留下…
展开
-
面试题 01.07. 旋转矩阵 先折半交换 后对角线交换
题目class Solution {public: void rotate(vector<vector<int>>& a) { int n=a.size(); for(int i=0;i<n/2;++i) for(int j=0;j<n;++j) swap(a[i][j],a[n-i-1][j]); for(int i=0;原创 2021-02-24 01:27:39 · 127 阅读 · 0 评论 -
leetcode 995. K 连续位的最小翻转次数 (思维)
题目class Solution {public: int minKBitFlips(vector<int>& a, int K) { int n=a.size(); int q[n+1],head=1,tail=0,ans=0;//队列里面放进入i代表 i~i+k-1有一次翻转 for(int i=0;i<n;++i){ while(head<=tail&&q[head]+原创 2021-02-18 19:21:59 · 80 阅读 · 0 评论 -
leetcode 128. 最长连续序列 (思维?)
class Solution {public: int longestConsecutive(vector<int>& nums) { int n=nums.size(),*vis=new int[n]; map<int,int>mp; for(int i=0;i<n;++i){ if(!mp.count(nums[i])) mp[nums[i]]=i,vis[i]=0; ..原创 2021-02-16 22:37:07 · 64 阅读 · 0 评论 -
leetcode 581. 最短无序连续子数组 (思维)
题目给几个样例吧,代码就很容易看明白了。[2,6,4,8,10,9,15][1,3,5,4,2][1,3,7,10,5,6,4,2,12]class Solution {#define INF 100001public: int l=-1,r=-1,k=INF; void cal(int i,int val){ if(l==-1) l=i; r=i+1,k=min(k,val); } int findUnsortedSubarr原创 2021-01-31 22:02:48 · 65 阅读 · 0 评论 -
leetcode 1375. 灯泡开关 III
class Solution {public: int numTimesAllBlue(vector<int>& a) { int n=a.size(),ans=0,mx=0; for(int i=0;i<n;++i) { mx=max(mx,a[i]); if(mx==i+1) ++ans; } return ans; }};原创 2020-12-05 17:21:49 · 90 阅读 · 0 评论 -
leetcode 135. 分发糖果 (相邻的孩子中,评分高的必须糖果更多) 思维
class Solution {public: int candy(vector<int>& a) { int n=a.size(),sum=0; if(n<=1) return n; sum=1; //pre的用处就是假如[3,7]是下坡 pre的值就是之前3分配的高度,然后[4,7]小朋友分别对应0,-1,-2,-3 这些小朋友都要增加4个糖果, //然后假如pre不大于等于5(第四个小朋.原创 2020-11-28 12:49:05 · 228 阅读 · 0 评论 -
leetcode 172. 阶乘后的零(输入一个n,输出n的阶乘有几个0 就是看1-n有多少个5)
题目class Solution {public: int trailingZeroes(int n) { int ans=0; while(n) ans+=n/5,n/=5; return ans; }};原创 2020-11-20 12:02:34 · 105 阅读 · 0 评论 -
leetcode 448. 找到所有数组中消失的数字(1<=a[i]<=n,一些出现两次一些出现一次求没出现的所有数字 原地修改数组做标记/置换)
题目class Solution {public: vector<int> findDisappearedNumbers(vector<int>& nums) { vector<int>ans; int n=nums.size(); for(int i=0;i<n;++i) if(nums[abs(nums[i])-1]>0) nums[abs(nums[i])-1]*=-1;原创 2020-11-19 09:56:33 · 91 阅读 · 0 评论 -
剑指 Offer 39. 数组中出现次数超过一半的数字( 假如一个数不是[1,i]的众数,那应该换数nums[i] 思维)
题目其实我也不会证明,也不想去证明呜呜,但直觉就是对的,我怎么可以这么不严谨!看代码就懂了:假如众数是x:x在前面出现的次数少,众数是它的话,后面ans一定会更新成x的。x在前面出现的次数多,可能x不会被替换,x即使被替换了,后面ans一定会替换成x的,因为x是众数鸭。class Solution {public: int majorityElement(vector<int>& nums) { int ans=nums[0],cnt=1,n=原创 2020-11-15 20:24:30 · 71 阅读 · 0 评论 -
leetcode 关于括号的问题(栈/dp)
文章目录856. 括号的分数856. 括号的分数题目第一种方法:比如((())()(*)) 只算最里面的括号对答案的权值是1<<l,l是向外的深度.class Solution {public: //比如(((*))(*)(*)) 只算最里面的括号对答案的权值是1<<l,l是向外的深度. int scoreOfParentheses(string s) { int l=0,ans=0; for(int i=0;i<s.原创 2020-11-12 14:37:05 · 111 阅读 · 0 评论 -
leetcode 41. 缺失的第一个正数(找出一堆数的mex 直接将数放在应该放的位置 思维)
题目比如[3,4,-1,1]:首先数中的 <=0 或者 >n的数都是没用的。就不管他们。3不该在1这个位置。将-1和3换一下[-1,4,3,1]。由于是-1所以不管了。4不该在2这个位置。将4和1换一下[-1,1,3,4]。换来了1,1也不该在2这个位置,将-1和1换一下[1,-1,3,4]。2这个位置现在是-1,我们不管他。3,4位置分别是应该的数。处理完了,最后扫一遍,哪个位置没有相应的数 就返回该位置下标。否则返回n+1;注意假如 交换的两个位置上的数相等的话,不需要交换了,原创 2020-11-12 14:35:50 · 139 阅读 · 0 评论 -
leetcode 一些快慢指针题
文章目录142. 环形链表 II287. 寻找重复数876. 链表的中间结点(fast== NULL||fast->next==NULL 则 slow是中间节点)234. 回文链表142. 环形链表 II题目兔子赶上了乌龟说明有环:首先,链表有环的话只能有一个环,就是上图的形状,因为每个节点只有一个next节点。兔子一次走m步,乌龟一次走n步。当兔子追上乌龟就是 (m-n)=k*环的长度,当m-n越大,就走的环数k越大,复杂度越高。不管m n为多少,这个算法正确性都是可以保证的原创 2020-11-12 14:30:40 · 91 阅读 · 1 评论