leetcode哈希表1、217、594、128

哈希表1、217、594、128

leetcode1两数之和

题目:
在这里插入图片描述
代码:

class Solution {
    public int[] twoSum(int[] nums, int target) {
       Map<Integer,Integer> map=new HashMap<Integer,Integer>();
        int i;
        for(i=0;i<nums.length;i++){
            if(map.containsKey(target-nums[i])){
                return new int[]{map.get(target-nums[i]),i};
            }

            map.put(nums[i],i);
        }
        return new int[0];

    }
}

leetcode217 存在重复元素

在这里插入图片描述集合的大小 a.size()
复习集合(尚硅谷)
题目:
在这里插入图片描述

代码:

class Solution {
    //Set存储无序不可以重复的数值
    //不重复数组的长度等于集合的长度
    public boolean containsDuplicate(int[] nums) {
        Set<Integer> set=new HashSet<>();
        //for循环增强
        for(int i:nums){
            set.add(i);
        }
        //集合的大小set.size()
        if(set.size()==nums.length) return false;
        return true;
    }
}

leetcode594 (重点看)最长和谐子序列

题目:
在这里插入图片描述
法一

***//map中的常用方法
//(1)map.getOrDefault(key,0)的用法
//当Map集合中有这个key时,就使用这个key值;
//如果没有就使用默认值defaultValue。
//(2)map.containsKey()的用法 是否包含key值
//(3)map.get(key)获得key所获得的键值***
class Solution {
    public int findLHS(int[] nums) {
        Map<Integer,Integer> map=new HashMap<Integer,Integer>();
        int ans=0;
        for(int i:nums){
            map.put(i,map.getOrDefault(i,0)+1);
        }
        for(int key:map.keySet()){
            if(map.containsKey(key+1)){
                ans=Math.max(ans,map.get(key)+map.get(key+1));
            }
        }
        return ans;
      
    }
}

此题可以参考官方题解讲解的特别清楚
法二


//哈希映射+单词扫描
class Solution {
    public int findLHS(int[] nums) {
        Map<Integer,Integer> map=new HashMap<Integer,Integer>();
        int ans=0;
        for(int key:nums){
            map.put(key,map.getOrDefault(key,0)+1);
            if(map.containsKey(key+1)){
                ans=Math.max(ans,map.get(key)+map.get(key+1));
            }
            if(map.containsKey(key-1)){
                ans=Math.max(ans,map.get(key)+map.get(key-1));
            }
      
        }
        // for(int key:map.keySet()){
        //     if(map.containsKey(key+1)){
        //         ans=Math.max(ans,map.get(key)+map.get(key+1));
        //     }
        // }
        return ans;
      
    }
}
参考官方题解

leetcode128最长连续子序列

题目:
在这里插入图片描述

class Solution {
    public int longestConsecutive(int[] nums) {
        //用HashSet去重
        Set<Integer> set=new HashSet<Integer>();
        for(int num:nums){
            set.add(num);
        }
        int m=0;//用于记录最长连续序列的长度
       //存在num-1跳过,
       //不存在num-1 判断以num开头的连续序列长度
        for(int num:set){
            if(!set.contains(num-1)){
                int i=num;
                int n=1;
                while(set.contains(i+1)){
                i++;
                n++;
                }
            m=Math.max(m,n);
            }
       
        }
     return m;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值