前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode(Weekly Contest 187)题解

LeetCode(Weekly Contest 187)题解

作者头像
西凉风雷
发布2022-11-23 19:44:01
2290
发布2022-11-23 19:44:01
举报

0. 前言

1. 题解

1.1?5400. 旅行终点站(1436.?Destination City)

代码语言:javascript
复制
class Solution {
public:
    string destCity(vector<vector<string>>& paths) {
        unordered_map<string, int> cnt;
        set<string> cities;
        for (auto v : paths) {
            cnt[v[0]]++;
            cities.insert(v[0]);
            cities.insert(v[1]);
        }
        string ans = "";
        for (auto v : cities) {
            if (cnt[v] == 0)    ans = v;
        }
        return ans;
    }
};

1.2?5401. 是否所有 1 都至少相隔 k 个元素(1437.?Check If All 1's Are at Least Length K Places Away)

代码语言:javascript
复制
class Solution {
public:
    bool kLengthApart(vector<int>& nums, int k) {
        vector<int> pos;
        int n = nums.size();
        for (int i = 0 ; i < n ; i++) {
            if (nums[i] == 1) {
                pos.push_back(i);
            }
        }
        n = pos.size();
        bool ans = true;
        for (int i = 1 ; i < n ; i++) {
            if (pos[i] - pos[i-1] < k+1) {
                ans = false;
                break;
            }
        }
        return ans;
    }
};

1.3?5402. 绝对差不超过限制的最长连续子数组(1438.?Longest Continuous Subarray With Absolute Diff Less Than or Equal to Limit)

代码语言:javascript
复制
class Solution {
public:
    int longestSubarray(vector<int>& nums, int limit) {
        map<int, int> cnt;
        int left = 0, n = nums.size(), ans = 0;
        for (int right = 0 ; right < n ; right++) {
            cnt[nums[right]]++;
            if (cnt.rbegin()->first - cnt.begin()->first <= limit) {
                ans = max(right - left + 1, ans);
                continue;
            }
            cnt[nums[left]]--;
            if (cnt[nums[left]] == 0) {
                cnt.erase(nums[left]);
            }
            left++;
        }
        return ans;
    }
};

1.4?5403. 有序矩阵中的第 k 个最小数组和(1439.?Find the Kth Smallest Sum of a Matrix With Sorted Rows)

代码语言:javascript
复制
class Solution {
public:
    void dfs(vector<vector<int>>& mat, int cur, int m, int n, int sum, int mid, int& cnt, int k) {
        if (cur == m || sum > mid || cnt > k)   return;
        dfs(mat, cur+1, m, n, sum, mid, cnt, k);
        for (int i = 1 ; i < n ; i++) {
            if (sum + mat[cur][i] - mat[cur][0] <= mid) {
                cnt++;
                dfs(mat, cur+1, m, n, sum + mat[cur][i] - mat[cur][0], mid, cnt, k);
            } else {
                break;
            }
        }
    }
    int kthSmallest(vector<vector<int>>& mat, int k) {
        int m = mat.size(), n = mat[0].size();
        int left = 0, right = 0;
        for (int i = 0 ; i < m ; i++) {
            left += mat[i][0];
            right += mat[i][n-1];
        }
        int init = left;
        while (left < right) {
            int mid = (right - left) / 2 + left;
            int cnt = 1;
            dfs(mat, 0, m, n, init, mid, cnt, k);
            if (cnt >= k) {
                right = mid;
            } else {
                left = mid + 1;
            }
        }
        return left;
    }
};
  • 暴力代码如下:
代码语言:javascript
复制
class Solution {
public:
    int kthSmallest(vector<vector<int>>& mat, int k) {
        int m = mat.size(), n = mat[0].size();
        vector<int> res(mat[0]);
        for (int i = 1 ; i < m ; i++) {
            multiset<int> tmp;
            for (auto cur : res) {
                for (auto next : mat[i]) {
                    tmp.insert(cur + next);
                }
            }
            res.assign(tmp.begin(), tmp.end());
            res.resize(min(k, (int)res.size()));
        }
        return res[k-1];
    }
};

3. 参考文献

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-05-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0. 前言
  • 1. 题解
    • 1.1?5400. 旅行终点站(1436.?Destination City)
      • 1.2?5401. 是否所有 1 都至少相隔 k 个元素(1437.?Check If All 1's Are at Least Length K Places Away)
        • 1.3?5402. 绝对差不超过限制的最长连续子数组(1438.?Longest Continuous Subarray With Absolute Diff Less Than or Equal to Limit)
          • 1.4?5403. 有序矩阵中的第 k 个最小数组和(1439.?Find the Kth Smallest Sum of a Matrix With Sorted Rows)
          • 3. 参考文献
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
          http://www.vxiaotou.com