第 193 场力扣周赛题解

第 193 场力扣周赛题解_第1张图片

5436. 一维数组的动态和

思路:就是求一波前缀和。

class Solution {
    public int[] runningSum(int[] nums) {
    	
    	for(int i=1;i

5437. 不同整数的最少数目

思路:简单贪心,我们每次去掉的数一定要是出现频率最小的,这样才能保证最后剩下的同样的数尽可能多。

class Solution {
    public int findLeastNumOfUniqueInts(int[] arr, int k) {
    	
    	Arrays.parallelSort(arr);
    	
    	List list=new ArrayList<>();
    	
    	int num=1;
    	for(int i=1;i0;i++) {
    		k-=list.get(i);
    		ans--;
    	}
    	
    	if(k<0) ans++;
    	
    	//System.out.println(k);
    	
    	return ans;
    }
}

5438. 制作 m 束花所需的最少天数

思路:二分答案,我们直接二分所需要的天数,根据当前天数能够知道哪些花是开放的,之后按照相邻的k个花为一个花束判断是否满足即可。

class Solution {
    public int minDays(int[] bloomDay, int m, int k) {

    	int n=bloomDay.length;
    	int ans=Integer.MAX_VALUE;
    	
    	int l=1,r=1000000000;
    	while(l<=r) {
    		int mid=(l+r)/2;
    		if(check(bloomDay,mid,m,k)) {
    			ans=mid;
    			r=mid-1;
    		}
    		else
    			l=mid+1;
    	}
    	
    	return ans==Integer.MAX_VALUE?-1:ans;
    }
    
    private boolean check(int[] a,int x,int m,int k) {
    	
    	int n=a.length;
    	int[] arr=new int[n];
    	
    	for(int i=0;i=k) {
    			num++;
    			sum=0;
    		}
    	}
    	
    	return num>=m;
    }
}

5188. 树节点的第 K 个祖先

思路:LCA的简化版本,我们可以考虑倍增算法查找第K个祖先。

不懂倍增算法的可以看我这篇博客。

class TreeAncestor {
	
	private int n;
	private int[][] f;
	private int[] dep;
	private List> list;
	
    public TreeAncestor(int n, int[] parent) {
    	
    	this.n=n;
    	f=new int[n][21];
    	dep=new int[n];
    	list=new ArrayList<>();
    	
    	for(int i=0;i());
    	
    	for(int i=1;i=0;i--)
    		if(f[x][i]!=-1 && dep[f[x][i]]>t)
    			x=f[x][i];
    	
    	return f[x][0];
    	
    }
}

 

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