【算法刷题day6】Leetcode:242. 有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和

本文主要是介绍【算法刷题day6】Leetcode:242. 有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • Leetcode 242. 有效的字母异位词
      • 解题思路
      • 代码
      • 总结
    • Leetcode 349. 两个数组的交集
      • 解题思路
      • 代码
      • 总结
    • Leetcode 202. 快乐数
      • 解题思路
      • 代码
      • 总结
    • Leetcode 1. 两数之和
      • 解题思路
      • 代码
      • 总结
    • HashSet基本使用:
    • HashMap基本使用:

草稿图网站
java的Deque

Leetcode 242. 有效的字母异位词

题目:242. 有效的字母异位词
解析:2.5 练习时长两年半

解题思路

使用长度为26的数组作为hash数组。

代码

class Solution {public boolean isAnagram(String s, String t) {int[] record = new int[26];for (char c : s.toCharArray())record[c - 'a']++;for (char c : t.toCharArray())record[c - 'a']--;for (int i = 0; i < record.length; i++)if (record[i] != 0)return false;return true;     }
}

总结

暂无

Leetcode 349. 两个数组的交集

题目:349. 两个数组的交集
解析:2.5 练习时长两年半

解题思路

使用Hash数组,整体方法同上题,额外使用ArrayList来动态存储结果,最终转化为数组返回结果。

代码

class Solution {public int[] intersection(int[] nums1, int[] nums2) {int[] hash1 = new int[1001];int[] hash2 = new int[1001];for (int num : nums1)hash1[num] = 1;for (int num : nums2)hash2[num] = 1;List<Integer> resList = new ArrayList<>();for (int i = 0; i < 1001; i++)if (hash1[i] == 1 && hash2[i] == 1)resList.add(i);int[] res = new int[resList.size()];int i = 0;for (int num : resList)res[i++] = num;  return res;}
}

总结

当没有限定元素大小时,需要使用HashSet容器

class Solution {public int[] intersection(int[] nums1, int[] nums2) {Set<Integer> set1 = new HashSet<>();Set<Integer> resSet = new HashSet<>();for (int num : nums1)set1.add(num);for (int num : nums2)if (set1.contains(num))resSet.add(num);int[] res = new int[resSet.size()];int i = 0;for (int num : resSet)res[i++] = num;return res;}
}
 //一般方法int[] res = new int[resSet.size()];int i = 0;for (int num : resSet)res[i++] = num;return res;//resSet.stream():将Set集合resSet转换为一个Stream流对象。//mapToInt(x -> x):使用mapToInt方法将Stream流中的每个元素映射为int类型。这里的x -> x表示将每个元素直接作为int类型返回。//toArray():将Stream流中的元素收集到一个int类型的数组中。return resSet.stream().mapToInt(x -> x).toArray();

Leetcode 202. 快乐数

题目:202. 快乐数
解析:2.5 练习时长两年半

解题思路

使用HashSet来记录是否有重复,有重复但没到1,说明再也到不了1

代码

class Solution {public boolean isHappy(int n) {Set<Integer> record = new HashSet<>();while (n != 1 && record.contains(n) == false){record.add(n);n = getNextNum(n);}return n == 1;}private int getNextNum(int n){int res = 0;while (n > 0){int tmp = n % 10;res += tmp * tmp;n = n / 10;}return res;}}

总结

暂无

Leetcode 1. 两数之和

题目:1. 两数之和
解析:2.5 练习时长两年半

解题思路

使用HashMap,记录当前元素。寻找target-nums[i]是否出现过。

代码

class Solution {public int[] twoSum(int[] nums, int target) {int[] res = new int[2];// if (nums == null || nums.length == 0)//     return res; Map<Integer, Integer> map = new HashMap<>();for (int i = 0; i < nums.length;i++){int tmp = target - nums[i];if (map.containsKey(tmp)){res[1] = i;res[0] = map.get(tmp);}map.put(nums[i], i);}return res;}
}

总结

对HashMap的使用还是比较生疏

HashSet基本使用:

//创建HashSet:
HashSet<String> set = new HashSet<>();//添加元素:
set.add("A");
set.add("B");
set.add("C");//获取 HashSet 的大小:
int size = set.size(); // 如果加入了三个元素,则返回 3//检查是否包含某个元素:
boolean hasElement = set.contains("A"); // 如果 "A" 在集合中,则返回 true//删除元素:
set.remove("A");//清空 HashSet:
set.clear();//判断 HashSet 是否为空:
boolean isEmpty = set.isEmpty();//遍历 HashSet:
// 使用迭代器
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {String element = iterator.next();// ... do something with element
}// 使用 forEach 和 lambda 表达式
set.forEach(element -> {// ... do something with element
});// 使用 for-each 循环
// 使用迭代器
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {String element = iterator.next();// ... do something with element
}
// 使用 forEach 和 lambda 表达式
set.forEach(element -> {// ... do something with element
});
// 使用 for-each 循环
for (String element : set) {// ... do something with element
}//转换为数组:
String[] array = set.toArray(new String[0]);

HashMap基本使用:

//创建HashMap:
HashMap<String, Integer> map = new HashMap<>();//添加元素:
map.put("key1", 1);
map.put("key2", 2);//获取元素:
Integer value = map.get("key1"); // returns 1//检查是否包含某个键:
boolean hasKey = map.containsKey("key1"); // returns true//删除元素:
map.remove("key1");//遍历HashMap:
for (Map.Entry<String, Integer> entry : map.entrySet()) {String key = entry.getKey();Integer value = entry.getValue();// ... do something with key and value
}//判断HashMap是否为空:
boolean isEmpty = map.isEmpty();//获取HashMap的大小:
int size = map.size();//清空HashMap:
map.clear();//其他静态和实例方法
//clone、putAll、removeAll

这篇关于【算法刷题day6】Leetcode:242. 有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/849517

相关文章

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

C++ Primer 多维数组的使用

《C++Primer多维数组的使用》本文主要介绍了多维数组在C++语言中的定义、初始化、下标引用以及使用范围for语句处理多维数组的方法,具有一定的参考价值,感兴趣的可以了解一下... 目录多维数组多维数组的初始化多维数组的下标引用使用范围for语句处理多维数组指针和多维数组多维数组严格来说,C++语言没

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多

查询SQL Server数据库服务器IP地址的多种有效方法

《查询SQLServer数据库服务器IP地址的多种有效方法》作为数据库管理员或开发人员,了解如何查询SQLServer数据库服务器的IP地址是一项重要技能,本文将介绍几种简单而有效的方法,帮助你轻松... 目录使用T-SQL查询方法1:使用系统函数方法2:使用系统视图使用SQL Server Configu

C#比较两个List集合内容是否相同的几种方法

《C#比较两个List集合内容是否相同的几种方法》本文详细介绍了在C#中比较两个List集合内容是否相同的方法,包括非自定义类和自定义类的元素比较,对于非自定义类,可以使用SequenceEqual、... 目录 一、非自定义类的元素比较1. 使用 SequenceEqual 方法(顺序和内容都相等)2.

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

锐捷和腾达哪个好? 两个品牌路由器对比分析

《锐捷和腾达哪个好?两个品牌路由器对比分析》在选择路由器时,Tenda和锐捷都是备受关注的品牌,各自有独特的产品特点和市场定位,选择哪个品牌的路由器更合适,实际上取决于你的具体需求和使用场景,我们从... 在选购路由器时,锐捷和腾达都是市场上备受关注的品牌,但它们的定位和特点却有所不同。锐捷更偏向企业级和专