第 187 场力扣周赛题解

5400. 旅行终点站

思路:哪个城市没作为起点呢它就是终点。

class Solution {
    public String destCity(List> paths) {
    	
    	Map count=new HashMap<>();
    	
    	for(int i=0;i

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

思路:标记下上一个1出现的位置即可。

class Solution {
    public boolean kLengthApart(int[] nums, int k) {
    	
    	int last=-k-100;
    	for(int i=0;i

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

思路:首先二分答案,之后根据当前答案定义两个堆,一个大顶堆和一个小顶堆,用大小顶堆的队头比较判断答案是否成立。

PS:说实话这题题意有锅啊,题目说了任意两个元素之间的绝对差必须小于或者等于 limit,但是样例里数组只有一个元素的时候你竟然返回1?白wa了两次。

class Solution {
	
	class node {
		int val,id;
		public node(int val,int id) {
			this.val=val;
			this.id=id;
		}
	}
	
    public int longestSubarray(int[] nums, int limit) {
    	
    	if(nums.length<=1) return nums.length;
    	
    	int ans=0;
    	int l=1,r=nums.length;
    	while(l<=r) {
    		int mid=(l+r)/2;
    		if(check(nums,limit,mid)) {
    			ans=mid;
    			l=mid+1;
    		}
    		else
    			r=mid-1;
    	}
    	
    	return ans;
    }
    
    private boolean check(int[] a,int x,int len) {
    	
    	PriorityQueue q=new PriorityQueue<>((aa,bb)->aa.val-bb.val);
    	PriorityQueue q2=new PriorityQueue<>((aa,bb)->bb.val-aa.val);
    	for(int i=0;i

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

思路:二分答案,判断时只用看有多少种数组和小于当前答案即可,若数量不为k,则更改答案继续判断。

class Solution {
	
	private int num;
	
    public int kthSmallest(int[][] mat, int k) {
    	
    	int ans=0;
    	int m=mat.length;
    	int n=mat[0].length;
    	
    	int l=0,r=0;
    	for(int i=0;i=k;
    	
    }
    
    private void dfs(int[][] a,int index,int start,int mx,int k) {
    
    	if(start>mx || num>k)
    		return;
    	
    	if(index==a.length) {
    		num++;
    		return;
    	}
    	
    	for(int i=0;i

 

你可能感兴趣的:(第 187 场力扣周赛题解)