LeetCode刷题笔记-数据结构-day5

Posted ΘLLΘ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode刷题笔记-数据结构-day5相关的知识,希望对你有一定的参考价值。

文章目录

LeetCode刷题笔记-数据结构-day5

334.递增的三元子序列

1.题目描述

原题链接:334. 递增的三元子序列

2.解题思路

题目要求:你能实现时间复杂度为 O(n) ,空间复杂度为 O(1) 的解决方案吗?

算法:贪心

这里我们使用贪心,用两个数ab表示遍历中最小的两个数,我们只需要在找出比b大的的第三个数就行。

具体操作(当前遍历的数为x):

  1. 如果x<=a。则将最小值a修改为x
  2. 如果上面的不满足,但是x<=b则将第二小的值修改为x
  3. 如果上面两个都不满足,说明此时的数已经大于前面两个,条件构成,返回true

需要注意的是,可以会有 4(a)、6(b)、3(x)这种情况,也就是说如果xa还小,那就把a的值设为x,然后继续遍历找最终的答案(这样的话a会跑到b的后边,但是不要紧,因为在b的前边,老a还是满足的),我们最终的第三个数只需要大于b即可!

3.代码

class Solution 
public:
    bool increasingTriplet(vector<int>& nums) 
        int a=INT_MAX,b=INT_MAX;
        for(auto x:nums)
            if(x<=a) a=x;
            else if(x<=b) b=x;
            else return true;
        
        return false;
    
;

238.除自身以外数组的乘积

1.题目描述

原题链接:238. 除自身以外数组的乘积

2.解题思路

题目要求:不要使用除法,且在 O(n) 时间复杂度内完成此题。尽量在常数空间复杂度内完成

我们可以两次遍历数组:

  1. 第一次从左边遍历,用一个数t记录前缀乘积
  2. 第二次从右边遍历,t重新置为1,记录后缀乘积
  3. 每个位置的结果只需要乘上遍历到该的位置的t即可
  4. 最终时间复杂度O(n),空间复杂度O(1)

3.代码

class Solution 
public:
    vector<int> productExceptSelf(vector<int>& nums) 
        int n=nums.size();
        vector<int> res(n,1);
        int t=1;
        for(int i=0;i<n;i++)
            res[i]*=t;
            t*=nums[i];
        
        t=1;
        for(int i=n-1;i>=0;i--)
            res[i]*=t;
            t*=nums[i];
        
        return res;
    
;

560.和为 K 的子数组

1.题目描述

原题链接:560. 和为 K 的子数组

2.解题思路

算法:前缀和+哈希表

我们可以用哈希表hash记录前缀和sum出现的次数。每次只需要hash[sum]++即可,hash[0]=1需要特别处理。

当我们遍历到某个位置的时候,hash[sum-k]的值就是前面出现的和为 k 的连续子数组的个数。

3.代码

class Solution 
public:
    int subarraySum(vector<int>& nums, int k) 
        map<int,int> hash;
        int sum=0;
        int res=0;
        hash[0]=1;
        for(auto x:nums)
            sum+=x;
            res+=hash[sum-k];
            hash[sum]++;
        
        return res;
    
;

以上是关于LeetCode刷题笔记-数据结构-day5的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode刷题笔记-动态规划-day5

LeetCode刷题笔记-动态规划-day5

LeetCode刷题笔记-动态规划-day5

LeetCode刷题笔记-动态规划-day6

LeetCode刷题笔记-动态规划-day6

LeetCode刷题笔记-动态规划-day6