Leetcode-334.递增三元子数列

Leetcode-334.递增三元子数列,第1张

Leetcode-334.递增三元子数列

话不多说,先上题。

334. 递增的三元子序列

难度中等484

给你一个整数数组 nums ,判断这个数组中是否存在长度为 3 的递增子序列。

如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。

先看到此题,我的思路是先创建一个二元数组,这里把原数组长度设为n,创建的二元数组为[n][2];[n][0],来保存原本的值,[n][1]来保存顺序,然后再用冒泡排序以[n][0]进行排序,第一个的顺序为最小值的顺序,然后后面如果有两个顺序比他大的,即输出true,否则输出false,这是我第一次想法的代码。

class Solution {
public:
    bool increasingTriplet(vector& nums) {
int n=nums.size();
int temp[n][2];
    for(int k=0;k temp[j+1][0]) 
			    {
                    int temp1 = temp[j][0];
                    temp[j][0] = temp[j+1][0];
                    temp[j+1][0] = temp1;
                    int temp2 = temp[j][1];
                    temp[j][1] = temp[j+1][1];
                    temp[j+1][1] = temp2;
                }
            }
        }
    int temp3=0,temp4=temp[0][1];
    for (int l=0;l 

 第三十二个的时候错了,便发现了有些数据即使不满足我上面的要求,也可以满足递增三元子数列。我后面还改了一下想骗多几次看看能不能水过去(错误的想法),但确实不行。

我便重新开始审题,重新想,数组的长度最高为5*10e5,用n方的算法就可能会爆,所以必须用O(n)的算法来写,只能用一次遍历,设置两个新的int类型变量,第一个为min,第二个为mid,第一个记录目前出现的最小的数值,第二个记录比min大且比mid小的的数值,然后如果后续有mid大的数值,直接输出true。这样有人可能会问,如果后续mid后面出了比min还小的数值呢,min等于他,然后再发现了比mid大的数,岂不是直接输出了true,但是不符合题意,其实min更小,如果后面有直接比mid大的输出true的话,也是满足题意的,min更小是为了找到更小的mid,从而方便输出,于是我刚开始设置的min为nums[0],mid为nums[1],开始提交

class Solution {
public:
    bool increasingTriplet(vector& nums) {
    if (nums.size() < 3) return false;
    int min = nums[0], mid = nums[1];
 for (auto num : nums) {
      if (num <= min) {
        min = num;
      } else if (num <= mid) {
        mid = num;
      } 
      else if (num > mid) {
        return true;
      }
    }
    return false;    
    }
};

 第六十八个的时候,这种情况下错了,但是我的思路是对的,于是我改了一下我的min和mid的初始值,改为INT_MAX,即int类型的最大值,这样做对程序没有影响,也可以使我的想法得到验证。

class Solution {
public:
    bool increasingTriplet(vector& nums) {
    if (nums.size() < 3) return false;
    int min = INT_MAX, mid = INT_MAX;
 for (auto num : nums) {
      if (num <= min) {
        min = num;
      } else if (num <= mid) {
        mid = num;
      } 
      else if (num > mid) {
        return true;
      }
    }
    return false;    
    }
};

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5702545.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存