第一题、连续数组 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
class Solution{
public int findMaxKength(int[] nums){
int maxLength = 0;
Map<Integer,Integer> map = new HashMap<Integer,Integer>();
int counter = 0;
map.put(counter,-1);
int n = nums.length;
for(int i = 0;i < n;i++){
if(nums[i] == 0){
counter--;
}else{
counter++;
}
if(map.containsKey(counter)){
int prevIndex = map.get(counter);
maxLength = Math.max(maxLength, i - prevIndex);
}else{
map.put(counter,i);
}
}
return maxLength;
}
}
第二题 最小K个数 面试题 17.14. 最小K个数 - 力扣(LeetCode)
class Solution{
public int[] smallestK(int[] arr, int k){
int[] vec = new int[k];
if(k == 0){return vec;} //排除0的情况
PriorityQueue<Integer> queue = new PriorityQueue<Integer>(
new Comparator<Integer>(){
public int compare(Integer num1, Integer num2){
return num2 - num1;
}
});//使用匿名内部类实现了Comparator接口,重写了compare方法来定义元素的比较规则
//创建了降序的优先队列
for(int i = 0;i < k; ++i){
queue.offer(arr[i]);
}
for(int i = k;i < arr.length; ++i){
if(queue.peek() > arr[i]){//判断元素优先队列的首元素和第i+1个元素大小
queue.poll();// 如果比首元素大,则删除首元素 将第i+1个元素加入优先队列
queue.offer(arr[i]);
}
}
for(int i = 0; i < k; ++i){
vec[i] = queue.poll();}
return vec;
}
}