两数-三数

35 阅读1分钟

相同元素

public static int[] intersection(int[] nums1, int[] nums2) {
    Set temp=new HashSet<Integer>();
    Set<Integer> result=new HashSet();
    for (int item:nums1) {
        temp.add(item);
    }
    for (int item:nums2) {
        if(temp.contains(item)){
            result.add(item);
        }
    }
    return result.stream().mapToInt(Integer::intValue).toArray();

}

快乐数 集合

public static boolean isHappy(int n) {
    HashSet a=new HashSet();
    int sum=0;
    while(true){
        sum=0;
        while (n>=1){
            int temp=n%10;
            sum+=temp*temp;
            n=n/10;
        }
        n=sum;
        if(sum==1){
            return true;
        }
        if(a.contains(sum)){
            return false;
        }
        a.add(sum);
    }
}

两数之和 哈希表

public static int[] twoSum(int[] nums, int target) {
    HashMap<Integer,Integer> restrict=new HashMap();
    for (int key=0;key<nums.length;key++) {
        restrict.put(nums[key],key);
    }
    for (int key=0;key<nums.length;key++) {
        if(restrict.containsKey(target-nums[key]) && key!=restrict.get(target-nums[key])){
            return new int[]{key,restrict.get(target-nums[key])};
        }
    }
    return new int[]{};
}

三数之和 双指针

public static List<List<Integer>> threeSum(int[] nums) {
    Arrays.sort(nums);
    List<List<Integer>> result=new ArrayList<>();
    for(int i=0;i<nums.length;i++){
        if(nums[i]>0){
            break;
        }
        if(i>=1&&nums[i]==nums[i-1]){
            continue;
        }
        int left=i+1;
        int right=nums.length-1;
        while (left<right){
            int sum=nums[i]+nums[left]+nums[right];
            if(sum>0){
                right--;
            }
            else if(sum<0){
                left++;
            }
            else{
                result.add(Arrays.asList(nums[i],nums[left],nums[right]));
                while (right > left&&nums[left]==nums[left+1])left++;
                while (right > left&&nums[right]==nums[right-1])right--;
                right--;
                left++;
            }
        }
    }
    return result;
}