一、有效的字母异位词

242. 有效的字母异位词

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值在一定范围内是连续的,因此可以很好的对应数组下标。
  • 其次是通过数值下标对应值的加减操作来统计字符串中字母出现的频率是否相等。

二、两个数组的交集

349. 两个数组的交集

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来遍历取出。

三、快乐数

202. 快乐数

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. 两数之和

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对应的值。

仅供个人学习参考,欢迎批评指正。

有效的字母异位词&两个数组的交集& 快乐数& 两数之和的更多相关文章

  1. 6、两个数组的交集 II

    6.两个数组的交集 II 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例 2: 输入: n ...

  2. 【Leetcode】【简单】【350. 两个数组的交集 II】【JavaScript】

    题目描述 350. 两个数组的交集 II 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2]输出: [2,2] 示例 2 ...

  3. Java实现 LeetCode 350 两个数组的交集 II(二)

    350. 两个数组的交集 II 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例 2: 输入 ...

  4. LeetCode(49): 字母异位词分组

    Medium! 题目描述: 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", ...

  5. Leetcode 49.字母异位词分组

    字母异位词分组 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", " ...

  6. 【leetcode】字母异位词分组

    给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", "tan&quo ...

  7. 前端与算法 leetcode 242. 有效的字母异位词

    目录 # 前端与算法 leetcode 242. 有效的字母异位词 题目描述 概要 提示 解析 解法一:哈希表 解法二:数组判断字符出现次数 解法三:转换字符串 算法 传入测试用例的运行结果 执行结果 ...

  8. 【leetcode-49】字母异位词分组

    给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", "tan&quo ...

  9. LeetCode242 有效的字母异位词(Java字符数组排序&自定义排序记录)

    题目: 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词.   示例 1: 输入: s = "anagram", t = "nagaram& ...

  10. leetCode242 有效的字母异位词

    引言: 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词. 示例 1: 输入: s = "anagram", t = "nagaram&qu ...

随机推荐

  1. Complementary XOR

    题目链接 题目大意: 给你两个字符串只有01组成,你可以选取区间[l, r],对字符串a在区间里面进行异或操作,对字符串b非区间值进行异或操作,问能否将两个字符串变为全0串.如果可以输出YES, 操作 ...

  2. Kubeadm搭建kubernetes集群

    Kubeadm搭建kubernetes集群 环境说明 | 角色 | ip | 操作系统 |组件 | | – | – | – | | master | 192.168.203.100 |centos8 ...

  3. Go语言核心36讲40

    我相信,经过上一次的学习,你已经对strings.Builder和strings.Reader这两个类型足够熟悉了. 我上次还建议你去自行查阅strings代码包中的其他程序实体.如果你认真去看了,那 ...

  4. 【云原生 · Kubernetes】Kubernetes Node的隔离与恢复

    个人名片: 因为云计算成为了监控工程师‍ 个人博客:念舒_C.ying CSDN主页️:念舒_C.ying Kubernetes Node的隔离与恢复 在硬件升级.硬件维护等情况下,我们需要将某些No ...

  5. 更改HTML请求方式的几种方法

    以ctfhub中的请求方式题目为例,则可以有: 法一:通过burpsuite抓包修改 在burpsuite中抓包后发送到repeater模块中,对请求方式进行修改即可 法二:通过curl命令进行 cu ...

  6. vue3 + element plus 使用字节跳动图标

    使用场景: 提一下vue2 用法>> 下面回到正题 vue3 用法 1  安装包: npm install @icon-park/vue-next --save 2  字节跳动图标库取图地 ...

  7. 【Day01】Spring Cloud入门-架构演进、注册中心Nacos、负载均衡Ribbon、服务调用RestTemplate与OpenFeign

    〇.课程内容 课程规划 Day1 介绍及应用场景 Day2 组件介绍及 广度 Day3 设计思想.原理和源码 Day4 与容器化的容器(服务迁移.容器编排) 一.业务架构的演进 1.单体架构时代 缺陷 ...

  8. 【Hadoop学习】上:组成介绍、生态体系、环境准备、不同运行模式测试

    目录: 入门(上) HDFS(中) MapReduce&Yarn(下) 优化(补充) 一.大数据概述 概念 特点:VVVV 应用场景 二.Hadoop到大数据生态 1.Hadoop生态圈.发展 ...

  9. 【Impala】概念、原理、内外部shell、建库建表、分区、查询、自定义函数、存储压缩

    一.基本概念 1.介绍 对HDFS.Hbase数据的高性能.低延迟的交互式SQL查询功能 2.优缺点 优点:基于内存运算,无需写入磁盘,无需转化为MR,支持Data Locality调度(数据和计算在 ...

  10. jjava基础语法

    java基础语法1 注释 注意: SDK要选择JDK1.8,且下面的语言要选择8,配置完这个环境后,JAVA才能正常运行. 单行注释 //+text 快捷键:ctrl+/ 多行注释  /*+text+ ...