题目链接: Leetcode Weekly Contest 269
1、2089. Find Target Indices After Sorting Array
难度:Easy
代码:
class Solution {
public List<Integer> targetIndices(int[] nums, int target) {
List<Integer> res=new ArrayList<>();
Arrays.sort(nums);
for(int i=0;i<nums.length;i++){
if(nums[i]==target){
res.add(i);
}
}
return res;
}
}
2、2090. K Radius Subarray Averages
难度:Medium
思路:
模拟即可,使用前缀和计算子数组的元素和。
代码:
class Solution {
public int[] getAverages(int[] nums, int k) {
int n=nums.length;
long[] prefix=new long[n+1];
for(int i=1;i<prefix.length;i++){
prefix[i]=prefix[i-1]+nums[i-1];
}
int[] avg=new int[n];
for(int i=0;i<n;i++){
if(i-k>=0&&i+k<n){
avg[i]=(int)((prefix[i+k+1]-prefix[i-k])/(2*k+1));
}
else{
avg[i]=-1;
}
}
return avg;
}
}
3、2091. Removing Minimum and Maximum From Array
难度:Medium
思路:
找到最小值和最大值的下标,然后分情况讨论。
代码
class Solution {
public int minimumDeletions(int[] nums) {
int minIndex=0,maxIndex=0;
int n=nums.length;
for(int i=0;i<nums.length;i++){
if(nums[i]<nums[minIndex]){
minIndex=i;
}
if(nums[i]>nums[maxIndex]){
maxIndex=i;
}
}
int max=Math.max(minIndex,maxIndex);
int min=Math.min(minIndex,maxIndex);
if(min==max){
return Math.min(min+1,n-min);
}
int res1=max+1;
int res2=n-min;
int res3=min+1+n-max;
return Math.min(res3,Math.min(res1,res2));
}
}
4、2092. Find All People With Secret
难度:Hard
思路
参考高赞回答,用并查集求解。
代码
class Solution {
public int[] p;//p[x]表示x的父亲节点
public int find(int x){
if(p[x]!=x){
p[x]=find(p[x]);
}
return p[x];
}
public List<Integer> findAllPeople(int n, int[][] meetings, int firstPerson) {
p=new int[n];
for(int i=1;i<n;i++){
p[i]=i;
}
p[firstPerson]=0;
Arrays.sort(meetings,(a,b)->a[2]-b[2]);
Map<Integer,List<int[]>> map=new TreeMap<>();
map.put(0,new ArrayList<>());
map.get(0).add(new int[]{0,firstPerson});
for(int[] meet:meetings){
if(!map.containsKey(meet[2])){
map.put(meet[2],new ArrayList<>());
}
map.get(meet[2]).add(new int[]{meet[0],meet[1]});
}
for(Integer key:map.keySet()){
List<int[]> curr=map.get(key);
for(int[] arr:curr){
int a=arr[0];
int b=arr[1];
if(find(a)==0||find(b)==0){
p[find(a)]=0;
p[find(a)]=0;
}
p[find(b)]=p[find(a)];
}
for(int[] arr:curr){
int a=arr[0];
int b=arr[1];
if(p[find(a)]==0||p[find(b)]==0){
p[find(a)]=0;
p[find(a)]=0;
}
else{
p[a]=a;
p[b]=b;
}
}
}
List<Integer> res=new ArrayList<>();
for(int i=0;i<n;i++){
if(p[find(i)]==0){
res.add(i);
}
}
return res;
}
}