代码随想录算法训练营 day06|242.有效的字母异位词、349. 两个数组的交集、第202题. 快乐数、1. 两数之和

有效的字母异位词

代码随想录

思路

通过一个哈希表,设置长度为26,正好统计26字母,统计每个字母出现的次数,对第一个单词,先累加,对第二个单词,递减,当哈希表中所有的数字都是0,那么就表示这两个单词是字母异位词

代码

class Solution {
    public boolean isAnagram(String s, String t) {
        int count[] = new int[26];
        for(int i = 0;i < s.length();i++){
            count[s.charAt(i)-'a'] += 1;
        }

         for(int j = 0;j < t.length();j++){
            count[t.charAt(j)-'a'] -= 1;
        }

        for(int i = 0;i<count.length;i++){
            if(count[i]!=0){
                return false;
            }
        }
        return true;

    }
}

349. 两个数组的交集

代码随想录

思路

思路:先给两个数组排好序,然后,创建一个数组存储不重复的元素,用双指针法在两个数组上移动

题解思路:用set不存储重复元素的特性来存储这两个素组中不重复的元素

代码:

class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
        Set<Integer> set1 = new HashSet<Integer>();
        Set<Integer> set2 = new HashSet<Integer>();

        for(int i = 0;i < nums1.length;i++){
            set1.add(nums1[i]);
        }

        for(int i = 0;i < nums2.length;i++){
            if(set1.contains(nums2[i])){
                set2.add(nums2[i]);
            }
        }

        return set2.stream().mapToInt(x->x).toArray();
    }
}

快乐数

代码随想录

思路

解题思路:通过set判断数字的sum是否重复出现,如果sum重复出现了,那么就表示存在一个循环,此时就不是快乐数。

代码

class Solution {
    public boolean isHappy(int n) {
        Set<Integer> s = new HashSet<Integer>();
        while(n != 1 && !s.contains(n)){
            s.add(n);
            n = nextNumber(n);
        }
        return n == 1;


    }

    public int nextNumber(int n){
        int nextn = 0;
        int x;
        while(n != 0){
            x= n%10;
            nextn += Math.pow(x,2);
            n /= 10;
        }

        return nextn;
    }
}

两数之和

代码随想录

思路

先定义好一个数组result,大小为2,用来返回结果的下标。用一个map来存储下标和数字之间的映射关系,用key存储数值,value存储下标。遍历原数组,在过程中,把数字加入到map中,然后不断判断,此时的值是否能和已经在map里的值相加组成target (使用map的containsKey方法),如果可以,就添加到result并放回。

代码

class Solution {
    public int[] twoSum(int[] nums, int target) {

        int[] result = new int[2]; //0 表示左边下标 1表示右下标

        int temp;
        Map<Integer,Integer> map = new HashMap<>();

        for(int i =0; i < nums.length; i++){
            
          temp = target - nums[i]; 
          if(map.containsKey(temp)){
            result[0] = i;
            result[1] = map.get(temp);
            break; 
          }
          map.put(nums[i],i);

        }
   
        return result;

    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值