目录
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) //如果交换后 仍不满足条件,则后面无论怎么换都存在数组内元素大于末尾元素,返回-1
                    return -1;
                res++;
            }
        }
        return res;
    }
} 



















