美文网首页
2122. 还原原数组

2122. 还原原数组

作者: 来到了没有知识的荒原 | 来源:发表于2022-01-03 16:49 被阅读0次

2122. 还原原数组

周赛t4

双指针+二分

class Solution {
 public:
  vector<int> recoverArray(vector<int>& nums) {
    int n = nums.size();
    sort(nums.begin(), nums.end());
    bool vis[n];
    memset(vis, 0, sizeof vis);

    for (int i = 1; i < n; i++) {
      int k = nums[i] - nums[0];
      if (k % 2 || k == 0) continue;
      int left = 0, right = 0;
      memset(vis, false, sizeof vis);

      vector<int> leftarr, rightarr;
      while (right < n) {
        while (left < n && vis[left]) {
          left++;
        }
        int value = nums[left] + k;
        int pos = lower_bound(nums.begin() + right, nums.end(), value) - nums.begin();
        if (pos >= n || value != nums[pos]) break;

        leftarr.push_back(nums[left]);
        rightarr.push_back(nums[pos]);
        vis[left] = vis[pos] = true;

        right = pos + 1;
        left++;
      }
      if (leftarr.size() == n / 2 && rightarr.size() == n / 2) {
        vector<int> res;
        for (int i = 0; i < int(n / 2); i++) {
          res.push_back((leftarr[i] + rightarr[i]) / 2);
        }
        return res;
      }
    }
    return {};
  }
};

相关文章

网友评论

      本文标题:2122. 还原原数组

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