美文网首页
(复杂dfs, 周赛t4)1982. 从子集的和还原数组

(复杂dfs, 周赛t4)1982. 从子集的和还原数组

作者: 来到了没有知识的荒原 | 来源:发表于2021-08-25 11:05 被阅读0次

1982. 从子集的和还原数组

题解

class Solution {
 public:
  vector<int> dfs(int n, vector<int>& arr) {
    if (n == 1) {
      if (arr[0] == 0) return {arr[1]};
      if (arr[1] == 0) return {arr[0]};
      return {};
    }
    int d = arr[1] - arr[0];
    vector<int> s, t;
    vector<bool> used(arr.size());
    int left = 0, right = 0;
    while (true) {
      while (left < arr.size() && used[left]) left++;
      if (left == arr.size()) break;
      used[left] = true;
      s.push_back(arr[left]);

      while (used[right] || arr[left] + d != arr[right]) right++;

      t.push_back(arr[right]);
      used[right] = true;
    }

    vector<int> res;
    res = dfs(n - 1, s);
    if (!res.empty()) {
      res.push_back(d);
      return res;
    }
    res = dfs(n - 1, t);
    if (!res.empty()) {
      res.push_back(-d);
      return res;
    }
    return {};
  }
  vector<int> recoverArray(int n, vector<int>& sums) {
    sort(sums.begin(), sums.end());
    return dfs(n, sums);
  }
};

相关文章

  • (复杂dfs, 周赛t4)1982. 从子集的和还原数组

    1982. 从子集的和还原数组[https://leetcode-cn.com/problems/find-arr...

  • 5670. 互质树

    LeetCode 第46场周赛 dfs+一点利用数据范围的trick

  • 力扣 90 子集 II

    题意:找出一个array的所有子集 思路: 把array排序 dfs找出所有的组合 每次dfs中遍历index之后...

  • leetcode动态规划—背包系列(二)

    416. 分割等和子集 给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等...

  • 416. 分割等和子集

    给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 注意: 每个数组中的...

  • LeetCode.416分割等和子集

    给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 注意每个数组中的元素...

  • T416、分割等和子集

    给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。注意:每个数组中的元素...

  • 第23章 基础背包问题

    1、等和的分隔子集 算法分析 本身这题是一个dfs的题目,从1到n中枚举,有两种方法,要么放左边left,要么放右...

  • subsets子集合(DFS)

    Given a set of distinct integers, S, return all possible ...

  • 07-18:回溯法review

    1、和为目标值的数组元素组合 def dfs(path,target,start): if targe...

网友评论

      本文标题:(复杂dfs, 周赛t4)1982. 从子集的和还原数组

      本文链接:https://www.haomeiwen.com/subject/bgusiltx.html