有效的字母异位词&两个数组的交集& 快乐数& 两数之和
一、有效的字母异位词
1.方法概述
- 因为本题中字符串只包含小写字母,就可以定义一个数组来记录字符串中字符出现的次数。遍历第一个字符串,用charAt拿到对应的小写字母然后减去'a'对应的ASCII值,得到一个相对数下标即可,然后对应下标的数组值++。同理另一个字符串采用--。最后遍历数组中是否存在不为0的元素,存在则说明两字符串中的字母出现的频率一定是不相同的。
2.具体实现
Java实现
点击查看代码
class Solution {
public boolean isAnagram(String s, String t) {
int[] arr = new int[26];
for(int i=0;i<s.length();i++){
arr[s.charAt(i)-'a']++;
}
for(int j = 0;j < t.length();j++){
arr[t.charAt(j)-'a']--;
}
for(int num : arr){
if(num != 0){
return false;
}
}
return true;
}
}
3.要点总结
- 首先判断的是字母,字母的ASCII值在一定范围内是连续的,因此可以很好的对应数组下标。
- 其次是通过数值下标对应值的加减操作来统计字符串中字母出现的频率是否相等。
二、两个数组的交集
1.方法概述
- 由于本题要求输出结果元素唯一,可以使用Set来解决本题的交集问题。首先创建一个遍历第一个数组,将其不重复的值存入到创建的set中。再遍历第二个数组,将其与set中包含的元素进行比较,如果相同则存入到创建的resultSet中,最后将reslutSet中的元素遍历转存到数组中输出。
2.具体实现
Java实现
点击查看代码
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
Set<Integer> set = new HashSet<>();
for (int num : nums1) {
set.add(num);
}
Set<Integer> resultSet = new HashSet<>();
for (int num : nums2) {
if (set.contains(num)) {
resultSet.add(num);
}
}
int[] result = new int[resultSet.size()];
int i = 0;
for (int num : resultSet) {
result[i++] = num;
}
return result;
}
}
3.要点总结
- 输出结果中的每个元素唯一,也就是去重,且不考虑输出顺序,此时就联想到集合Set不包含重复元素的集合这一特性来解决。
- Set集合中的元素需要使用增强for来遍历取出。
三、快乐数
1.方法概述
- 首先考虑的是创建一个集合set来存放出现过的数字拆解平方之和,如果再次出现则证明该数字不是快乐数,因为重复出现必然会导致无限循环变不到1。接下来考虑如何拆分数字,我们可以使用一个while循环来重复这个过程,条件是这个数值是大于0的(题目要求快乐数是一个正数)。首先模取余,平方求和,然后再将n除去上一位数,再模取余平方求和。然后用while循环将每次求和数字进行判断是否符合不等于1且set集合不包含该数字的要求,如果不符合返回false,否则返回true。
2.具体实现
Java实现
点击查看代码
class Solution {
private int getNextNumber(int n){
int ret = 0;
while(n>0){
int tmp = n%10;
ret += tmp*tmp;
n = n/10;
}
return ret;
}
public boolean isHappy(int n) {
Set<Integer> set = new HashSet<>();
while(n != 1 && !set.contains(n)){
set.add(n);
n = getNextNumber(n);
}
return n == 1;
}
}
3.要点总结
- 一是要如何分解数字,%模是取余数,/是除取上一位上的数字。
- 如何判断该数字在求和过程中是否会重复出现。
四、两数之和
1.方法概述
- 本题既要查询数组值是否匹配,又要返回下标。我们可以考虑使用Map集合来解决该问题。因为返回的是数组类型的两个数值,这里我们定义一个大小为二的数组ret来存储结果。当数组为空时直接返回ret。接下来创建一个map,通过for循环来遍历目标值在数组中的由那两个数组成,且当前值和目标值的差值是否在之前遍历时出现过,如果没有则存入到map中,来存放下标当前遍历元素的值和下标。如果已近存在则将当前下标和差值下标存放到ret中然后break。最后返回ret。
2.具体实现
Java实现
点击查看代码
class Solution {
public int[] twoSum(int[] nums, int target) {
int[] ret = new int[2];
if(nums == null || nums.length == 0) return ret;
Map<Integer,Integer> map = new HashMap<>();
for(int i = 0;i<nums.length;i++){
int tmp = target - nums[i];
if(map.containsKey(tmp)){
ret[1] = i;
ret[0] = map.get(tmp);
break;
}
map.put(nums[i],i);
}
return ret;
}
}
3.要点总结
- 为什么会使用Map来解决该问题?因为本题既要求查询该值是否满足条件同时又要返回下标,且要能去重,Map的特性正好满足。
- 本题的map中的key用来存下标i,value用来存数组中i对应的值。
仅供个人学习参考,欢迎批评指正。
有效的字母异位词&两个数组的交集& 快乐数& 两数之和的更多相关文章
- 6、两个数组的交集 II
6.两个数组的交集 II 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例 2: 输入: n ...
- 【Leetcode】【简单】【350. 两个数组的交集 II】【JavaScript】
题目描述 350. 两个数组的交集 II 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2]输出: [2,2] 示例 2 ...
- Java实现 LeetCode 350 两个数组的交集 II(二)
350. 两个数组的交集 II 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例 2: 输入 ...
- LeetCode(49): 字母异位词分组
Medium! 题目描述: 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", ...
- Leetcode 49.字母异位词分组
字母异位词分组 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", " ...
- 【leetcode】字母异位词分组
给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", "tan&quo ...
- 前端与算法 leetcode 242. 有效的字母异位词
目录 # 前端与算法 leetcode 242. 有效的字母异位词 题目描述 概要 提示 解析 解法一:哈希表 解法二:数组判断字符出现次数 解法三:转换字符串 算法 传入测试用例的运行结果 执行结果 ...
- 【leetcode-49】字母异位词分组
给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", "tan&quo ...
- LeetCode242 有效的字母异位词(Java字符数组排序&自定义排序记录)
题目: 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词. 示例 1: 输入: s = "anagram", t = "nagaram& ...
- leetCode242 有效的字母异位词
引言: 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词. 示例 1: 输入: s = "anagram", t = "nagaram&qu ...
随机推荐
- CSP-S2022 游寄
前言:最后确实寄了,因为疫情,都没考成. \(8.26\) 占坑. \(8.23\) 参加浴谷月赛初赛模拟,报的 \(S\) 组,只有 \(71\) 分. \(8.25\) \(AK\) 了同学出的比 ...
- <二>派生类的构造过程
派生类从继承可以继承来所有的成员(变量和方法) 除了构造函数和析构函数 派生类怎么初始化从基类继承来的成员变量的呢?通过调用基类的构造函数来初始化 派生类的构造函数和析构函数,负责初始化和清理派生类部 ...
- 关于在linux上vm virtualbox读取不到U盘问题的解决
1.设置usb2.0模式 如果你没安装拓展插件的话,调成usb2.0就会出现无效的配置这个提示,并且启动虚拟机会报 Implementation of the USB 2.0 controller n ...
- python文件名解析---从文件名获得分类类别
python文件名解析-从文件名获得分类类别 python os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表.列表以字母顺序. listdir()方法 举例说明 lis ...
- js逆向之补环境常用代码
//第一种 补环境的方法 let test1 = { name:"小红" }; test = new Proxy(test1,{ get(target,key){ console. ...
- MYSQL下载 环境配置 修改密码 基本SQL语句
目录 存取数据的演变史 数据库软件应用史 数据库的本质 数据库的分类 关系型数据库 特征 常见关系型数据库 非关系型数据库 特征 常见非关系型数据库 mysql简介 mysql下载 启动mysql 系 ...
- windows上用vs2017静态编译onnxruntime-gpu CUDA cuDNN TensorRT的坎坷之路
因为工作业务需求的关系,需编译onnxruntime引入项目中使用,主项目exe是使用的vs2017+qt5.12. onnxruntime就不用介绍是啥了撒,在优化和加速AI机器学习推理和训练这块赫 ...
- 搭建漏洞环境及实战——搭建SQL注入平台
Sqli-lab是一款学习SQL注入的开源平台,共有75种不同类型的注入,复制源码然后将其粘贴到网站的目录中,进入MySQL管理中的PHPMyAdmin,打开http://127.0.0.1/phpM ...
- 【机器学习】李宏毅——AE自编码器(Auto-encoder)
1.What 在自编码器中,有两个神经网络,分别为Encoder和Decoder,其任务分别是: Encoder:将读入的原始数据(图像.文字等)转换为一个向量 Decoder:将上述的向量还原成原始 ...
- vue 实现一键复制功能(两种方式)
方法 一 : <div class="mask-cont"> <p><input id="input" /></p&g ...