9.1深信服开发岗笔试
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); } }