首页 > 其他 > 详细

b_lc_合并若干三元组以形成目标三元组(思维=逻辑严密)

时间:2021-06-13 18:54:23      阅读:30      评论:0      收藏:0      [点我收藏+]

给你一个二维整数数组 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;
    }
};

b_lc_合并若干三元组以形成目标三元组(思维=逻辑严密)

原文:https://www.cnblogs.com/wdt1/p/14879929.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!