zoukankan      html  css  js  c++  java
  • b_lc_合并若干三元组以形成目标三元组(思维=逻辑严密)

    给你一个二维整数数组 triplets ,其中 triplets[i] = [ai, bi, ci] 表示第 i 个 三元组 。
    同时,给你一个整数数组 target = [x, y, z] ,表示你想要得到的 三元组 。
    为了得到 target ,你需要对 triplets 执行下面的操作 任意次(可能 零 次):

    • 选出两个下标(下标 从 0 开始 计数)i 和 j(i != j),并 更新 triplets[j] 为 [max(ai, aj), max(bi, bj), max(ci, cj)] 。
    • 例如,triplets[i] = [2, 5, 3] 且 triplets[j] = [1, 7, 5],triplets[j] 将会更新为 [max(2, 1), max(5, 7), max(3, 5)] = [2, 7, 5] 。

    如果通过以上操作我们可以使得目标 三元组 target 成为 triplets 的一个 元素 ,则返回 true ;否则,返回 false 。

    输入:triplets = [[2,5,3],[1,8,4],[1,7,5]], target = [2,7,5]
    输出:true
    解释:执行下述操作:
    - 选择第一个和最后一个三元组 [[2,5,3],[1,8,4],[1,7,5]] 。
    更新最后一个三元组为 [max(2,1), max(5,7), max(3,5)] = [2,7,5] 。triplets = [[2,5,3],[1,8,4],[2,7,5]]
    目标三元组 [2,7,5] 现在是 triplets 的一个元素。
    

    思维:每个三元组都可以被选多次,但由于选多次是没有意义的,因为要取的是最大值,所以只需要判断三元组中有没有满足
    =x <= y <= z
    <=x = y <= z
    <=x <= y = z
    有没有满足这三个条件的三元组

    因为如果三种情况都覆盖到了的话,就一定可以凑成 =x,=y,=z 的三元组,

    class Solution {
    public:
        bool mergeTriplets(vector<vector<int>>& A, vector<int>& t) {
            bool b1 = false, b2 = false, b3 = false;
            for (auto& a : A) {
                if (a[0] == t[0] && a[1] <= t[1] && a[2] <= t[2]) {
                    b1 = 1;
                }
                if (a[0] <= t[0] && a[1] == t[1] && a[2] <= t[2]) {
                    b2 = 1;
                }
                if (a[0] <= t[0] && a[1] <= t[1] && a[2] == t[2]) {
                    b3 = 1;
                }
            }
            return b1 && b2 && b3;
        }
    };
    
  • 相关阅读:
    .NET基础——数组
    .NET基础——循环、枚举
    .NET基础——运算符
    .NET基础——基本概念
    面向对象基础——结构体
    面向对象基础——静态成员、静态类
    面向对象基础——基本概念
    接口 与 抽象类
    委托与事件——事件
    委托与事件——委托
  • 原文地址:https://www.cnblogs.com/wdt1/p/14879929.html
Copyright © 2011-2022 走看看