代码随想录算法训练营day06
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_两个数组的交集
题目:
题意:给定两个数组,编写一个函数来计算它们的交集。
算法思想:
利用 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