一、有效的字母异位词

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. EdgeCore初学习

    ### 前提 初学edgeCore,有不足之处,欢迎指正 ### 大纲 1. 日志查看2. 重启3. 在线编译4. sftp同步代码5. 整体架构6. 通信协议7. 模拟实现(待实现) ### 步骤 ...

  2. 16、有n个正数,使得前面每个数依次后移m个位置,最后m个数变成最前面m个数

    /* 有n个正数,使得前面每个数依次后移m个位置,最后m个数变成最前面m个数 */ #include <stdio.h> #include <stdlib.h> #define ...

  3. 超精准!AI 结合邮件内容与附件的意图理解与分类!⛵

    作者:韩信子@ShowMeAI 深度学习实战系列:https://www.showmeai.tech/tutorials/42 TensorFlow 实战系列:https://www.showmeai ...

  4. PyQt5程序打包出错Failed to execute script

    出现这种报错一般有两种可能: 1. 该被引入的资源你没有放到 exe 的相对路径 这种错误一般是你直接引入图片或者图标, 而没有放到 打包后的exe的相对路径 2. 加参数 假设 main.py 为程 ...

  5. uni 结合vuex 编写动态全局配置变量 this.baseurl

    在日常开发过程,相信大家有遇到过各种需求,而我,在这段事件便遇到了一个,需要通过用户界面配置动态接口,同时,因为是app小程序开发,所以接口中涉及到了http以及websocket两个类型的接口. 同 ...

  6. 【大数据】kafka-02:Kafka Connect内容、原理及使用

    〇.概述 1.常见资料 (1)confluent https://docs.confluent.io/5.4.0/connect/kafka-connect-jdbc/sink-connector/s ...

  7. Java 中的接口还可以这样用,你知道吗?

    Java 程序员都知道要面向接口编程,那 Java 中的接口除了定义接口方法之外还能怎么用你知道吗?今天阿粉就来带大家看一下 Java 中的接口还可以有哪些用法. 基本特性 我们先看一下接口的基本特性 ...

  8. vivo 云原生容器探索和落地实践

    作者:vivo 互联网容器团队- Pan Liangbiao 本文根据潘良彪老师在"2022 vivo开发者大会"现场演讲内容整理而成.公众号回复[2022 VDC]获取互联网技术 ...

  9. java中的instanceof方法

    本文主要讲述java中的instanceof()方法. 示例代码如下: public class InstanceTest { public static void main(String[] arg ...

  10. C++进阶(哈希)

    vector容器补充(下面会用到) 我们都知道vector容器不同于数组,能够进行动态扩容,其底层原理:所谓动态扩容,并不是在原空间之后接续新空间,因为无法保证原空间之后尚有可配置的空间.而是以原大小 ...