C++岗,但是只会Java,C++选择填空看不懂。做的不好。。看运气了。。
算法最后一题比较难,没时间做了
1.数组前两个数比较,求最大的。然后依次往后比较,求连续k轮胜出的元素。
public class Q1 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String str = scan.nextLine();
String[] arr = str.split(" ");
long[] nums = new long[arr.length - 1];
for(int i = 0;i < nums.length;i++){
nums[i] = Long.parseLong(arr[i]);
}
int k = Integer.parseInt(arr[arr.length - 1]);
long maxVal = nums[0];
Map<Long,Integer> map = new HashMap<>();
for(int i = 1;i < nums.length;i++){
maxVal = Math.max(maxVal,nums[i]);
map.put(maxVal,map.getOrDefault(maxVal,0) + 1);
}
if(k >= nums.length){
long m = getMax(nums);
System.out.println(m);
}else if(k < nums.length){
Set<Long> set = map.keySet();
for(long se:set){
int val = map.get(se);
if(val >= k){
System.out.print(se);
}
}
}
}
public static long getMax(long[] nums){
long max = nums[0];
for(long num : nums){
if(max < num){
max = num;
}
}
return max;
}
}
2.求数组中最长的连续子序列。 import java.util.*;
public class Q5 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
long[] nums = new long[n];
for(int i = 0;i < nums.length;i++){
nums[i] = scan.nextLong();
}
Arrays.sort(nums);
Set<Long> set = new HashSet<>();
for(long num:nums){
set.add(num);
}
long count = 0;
for(long num : set){
if(!set.contains(num - 1)){
long current = num;
while(set.contains(current + 1)){
current ++;
}
count = Math.max(count,current - num + 1);
}
}
System.out.println(count);
}
}
#深信服笔试题#