代码随想录算法训练营day06

03-01 1611阅读

242_有效的字母异同位

题目:

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。

示例 1: 输入: s = "anagram", t = "nagaram" 输出: true

示例 2: 输入: s = "rat", t = "car" 输出: false

说明: 你可以假设字符串只包含小写字母。

算法思想:

用数组实现hash表,a~z 26个字母映射到数组 hash[26]下标 0~25 位置。

遍历 s 表,hash[s[i]-'a']++;

遍历 t 表,hash[t[i]-'a']--;

检查 hash 表值是否全为0;

代码:

class Solution {
    public boolean isAnagram(String s, String t) {
        int[] hash = new int[26];
        for (int i = 0; i  

注意:

1、字母的ASCII码不用记,只需要用字母 s[i]-'a'

2、Java 中 String 类获得长度 length() 方法 ,获得指定下标元素值 charAt() 方法

349_两个数组的交集

题目:

题意:给定两个数组,编写一个函数来计算它们的交集。

代码随想录算法训练营day06

算法思想:

利用 Java 的 HashSet ,定义两个哈希表 set1、set2,用add() 方法把 nums1 映射到 set1 ,用 cantains() 方法判断是否存在,如果元素在 set1 中出现过,加入 set2 。把 set2 转换成数组输出

代码:

public class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
        Set set1 = new HashSet();
        Set set2 = new HashSet();
        for(int i=0;i (int) x).toArray(); 
Object[]
toArray()
Returns an array containing all of the elements in this collection. 

202_快乐数

题目:

编写一个算法来判断一个数 n 是不是快乐数。

「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为  1,那么这个数就是快乐数。

如果 n 是快乐数就返回 True ;不是,则返回 False 。

示例:

输入:19

输出:true

解释:

1^2 + 9^2 = 82

8^2 + 2^2 = 68

6^2 + 8^2 = 100

1^2 + 0^2 + 0^2 = 1

算法思想:

返回 false 的条件:得到的 sum 值是之前出现过的,这时永远不能得到 1 结果,进入无限循环;

返回 true 的条件:sum==1;

代码:

public class Solution {
    public boolean isHappy(int n) {
        // 题目说的无限循环,就是 出现过的 sum 值再次出现,这时无论再求多少次 sum 都不会变为1
        Set set = new HashSet();
        int sum = n;
        while (sum != 1) {
            if (set.contains(sum) == true) //如果sum值之前初出现过表示会进入无限循环
                return false;
            set.add(sum);
            //得到每个位置上的数字的平方和
            int temp = 0;
            while (sum > 0) {
                temp += (sum % 10) * (sum % 10);
                sum /= 10;
            }
            sum = temp;
        }
        return true;
    }
}

注意:

1、判断进入返回 false 也就是会进入无限循环的条件;

2、计算各位平方的和怎么写;

001、两数之和

题目:

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9

所以返回 [0, 1]

算法思想:

1、暴力法,两层 for 循环,时间复杂度为 (n^2)

代码:

int* twoSum(int* nums, int numsSize, int target, int* returnSize) {
    int *ans=(int *)malloc(sizeof(int)*2);
    for(int i=0;i
VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]