目录
1、找出强数对的最大异或值 - 暴力
2、高访问员工 - 哈希表 + 模拟
3、最大化数组末位元素的最少操作次数 - 思维 + 贪心
1、找出强数对的最大异或值 - 暴力
找出强数对的最大异或值 I
class Solution {public int maximumStrongPairXor(int[] a) {int n=a.length,max=0;for(int i=0;i<n;i++){for(int j=i;j<n;j++){if(Math.abs(a[i]-a[j])<=Math.min(a[i],a[j])){max=Math.max(max,a[i]^a[j]);}}}return max;}
}
2、高访问员工 - 哈希表 + 模拟
高访问员工
思路:
名字存其下所有时间(换算成分钟数),然后进行排序
另每个时间+59=限制时间,向该时间后查找,如果出现2个小于限制时间,则将该名字存入答案并跳出遍历下一个名字
class Solution {public List<String> findHighAccessEmployees(List<List<String>> a) {Map<String,List<Integer>> mp=new HashMap<>();List<String> res=new ArrayList<>();for(int i=0;i<a.size();i++){String name=a.get(i).get(0);String time=a.get(i).get(1);List<Integer> t=mp.getOrDefault(name,new ArrayList<>());t.add(trans(time));mp.put(name,t);}for(Map.Entry<String,List<Integer>> x:mp.entrySet()){List<Integer> t=x.getValue();String name=x.getKey();Collections.sort(t);System.out.println(name+" "+t);boolean f=false;for(int i=0;i<t.size()-2;i++){if(f) break;int limt=t.get(i)+59,cnt=1;for(int j=i+1;j<t.size();j++){if(t.get(j)<=limt) cnt++;if(cnt==3){f=true;res.add(name);break;}}}}return res;}public int trans(String s){int res=Integer.parseInt(s.substring(0,2))*60+Integer.parseInt(s.substring(2));return res;}}
3、最大化数组末位元素的最少操作次数 - 思维 + 贪心
2934. 最大化数组末位元素的最少操作次数
思路:
只有两种情况:
- 交换最后一位数
- 不交换最后一位数
对这两种情况,再遍历【0~n-2】序号的数i
- 如果若 nums1[i]>nums1[n−1]或 nums2[i]>nums2[n−1],则交换 nums1[i]和 nums2[i]
- 若交换后仍有 nums1[i]>nums1[n−1] 或 nums2[i]>nums2[n−1],则当前情况无解
class Solution {public int minOperations(int[] nums1, int[] nums2) {int n=nums1.length;return Math.min(f(nums1[n-1],nums2[n-1],nums1,nums2),1+f(nums2[n-1],nums1[n-1],nums1,nums2));}public int f(int last1,int last2,int[] a,int[] b){int res=0;for(int i=0;i<a.length-1;i++){if(a[i]>last1||b[i]>last2){if(b[i]>last1||a[i]>last2) //如果交换后 仍不满足条件,则后面无论怎么换都存在数组内元素大于末尾元素,返回-1return -1;res++;}}return res;}
}