美文网首页
LeetCode.187场周赛

LeetCode.187场周赛

作者: _NewMoon | 来源:发表于2020-05-03 22:48 被阅读0次

5400. 旅行终点站

用map标记一下即可。

class Solution {
public:
    string destCity(vector<vector<string>>& paths) {
        map<string,string> h;
        map<string,bool> p;
        
        int n = paths.size();
        
        for(int i = 0; i<n; i++){
            p[paths[i][0]] = false;
            p[paths[i][1]] = false;
        }
        for(int i = 0; i<n; i++){
            p[paths[i][0]] = true;
            
        }
        string ans;
        for(auto x:p){
            if(x.second == false) ans = x.first;
        }
        return ans;
    }
};

5401. 是否所有 1 都至少相隔 k 个元素

遍历一遍。

class Solution {
public:
    bool kLengthApart(vector<int>& nums, int k) {
        int n = nums.size();
        if(!k) return true;
        
        bool ans = true;
        int t = -1;
        for(int i = 0; i<n; i++){
            if(nums[i] == 1){
                if(t == -1){
                    t = i;
                }else{
                    if(i-t-1<k){
                        ans = false;
                        break;
                    }else{
                        t = i;
                    }
                }
            }
        }
        return ans;
    }
};

5402. 绝对差不超过限制的最长连续子数组

双指针,首先,让R指针一直往右走,且区间[L,R]满足题目条件,直到遇到某一数使条件无法满足,舍弃右指针R,让左指针L向右移动,令R=L,从L重新开始更新区间。(数据好像不是很强)

class Solution {
public:
    int longestSubarray(vector<int>& nums, int limit) {
        int n = nums.size();
        int l = 0,r = 0,ans = 0, len = 0;
        int Min = 2e9, Max = -2e9;
        for(; r < n ;){
            int num = nums[r];
            Max = max(Max,num);
            Min = min(Min,num);

            if(abs(Max - Min) <= limit){
                len ++;
                r++;
                ans = max(ans,len);
            }else{
                l++;
                r = l;
                Min = 2e9,Max = -2e9;
                len = 0;
            }
        }
        return ans;
    }
};

5403. 有序矩阵中的第 k 个最小数组和

(看了二分的题解后改的),首先找到最小数组和Left和最大数组和Right,然后二分,每次利用dfs判断数组和小于等于mid的数组有多少个。

const int N = 50;
bool st[N][N];
class Solution {
public:
    vector<int> a;
    int n,m,w;
    //cnt表示当前比mid小的序列的个数,sum表示当前选择的序列元素之和
    void dfs(vector<vector<int>>& t,int step,int& cnt,int sum,int mid){
        if(step == n|| cnt >=w || sum>mid) return ;
        dfs(t,step+1,cnt,sum,mid);
        for(int i = 1; i<m; i++){
            if(sum-t[step][0] + t[step][i] <= mid) {
                cnt ++;
                dfs(t,step+1,cnt,sum-t[step][0] + t[step][i],mid);
            }else
                break;
        }
        return ;
    }
    int kthSmallest(vector<vector<int>>& mat, int k) {
        n = mat.size(), m = mat[0].size();
        w = k;
        int left = 0,right = 0;
        for(int i = 0; i<n; i++){
            left += mat[i][0];
            right += mat[i][m-1];
        }
        int cnt = 1;
        int low = left;
        while(left<right){
            int mid = (left+right)>>1;
            cnt = 1;
            dfs(mat,0,cnt,low,mid);
            if(cnt >= k) right = mid;
            else left = mid+1;
        }
        return left;
    }
};

相关文章

  • LeetCode.187场周赛

    5400. 旅行终点站 用map标记一下即可。 5401. 是否所有 1 都至少相隔 k 个元素 遍历一遍。 54...

  • 新城玺樾府掼蛋联赛

    本次掼蛋联赛分为 4场专场周赛及1场月度总决赛 每场周赛决出入围选手入围月度总决赛 比赛以组为单位,每组为对家2人...

  • 第186场周赛

    前言 分割字符串的最大得分 可获得的最大点数 对角线遍历II 带限制的字序列和 分割字符串的最大得分 题目连接 解...

  • LeetCode 周赛 334,在算法的世界里反复横跳

    大家好,我是小彭。 今天是 LeetCode 第 334 场周赛,你参加了吗?这场周赛考察范围比较基础,整体难度比...

  • 5670. 互质树

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

  • leetcode 197 场周赛解析

    第一题 链接:https://leetcode-cn.com/problems/number-of-good-pa...

  • LeetCode.201场周赛

    写在前面:好久没写博客了,今天正好是周末Leetcode周赛,补充一个笔记吧。期末考试还剩一周了,暂时得放几天代码...

  • LeetCode.193场周赛

    先bb两句,科目三终于考完了,现在可以好好的学习(玩耍)了hh 1480.一维数组的动态和 给你一个数组 nums...

  • LeetCode.195场周赛

    1496. 判断路径是否相交 给你一个字符串 path,其中 path[i] 的值可以是'N'、'S'、'E' 或...

  • LeetCode.204场周赛

    5499. 重复至少 K 次且长度为 M 的模式 给你一个正整数数组 arr,请你找出一个长度为 m且在数组中至少...

网友评论

      本文标题:LeetCode.187场周赛

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