day5有效字母得移位两个数组的交集快乐数两个数之和
今天学习哈希表,哈希表可以用来判断是否出现过这个元素,典型的哈希结构有三种:数组、set和map,他们使用的情况不同:
- 数组:适合元素有范围限制,且数据并不是很大
- set:适合数据差异比较大的数据,并不是连续分布
- map:适合存放一对数据
1.力扣242
本题利用哈希法中数组结构来解决问题,定义一个数组来记录元素出现的次数,接着再判断下一个字符串出现的次数,若出现则把数组对应元素的位置-1操作,最终判断元素是否有剩余。
解题步骤:
- 因为题目中给定限制,元素都是小写字母,所以定义一个26个英文字母,用来记录出现次数
- 遍历第一个字符串,让arr[s.charAt(i)-'a']++操作,即出现次数+1
- 遍历第二个字符串,让arr[s.charAt(i)-'a']--操作,即出现次数-1
- 最终遍历res数组,若数组中的值出现不为0时,则返回false
代码如下:
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 i=0;i<t.length();i++){arr[t.charAt(i)-'a']--;}for(int i=0;i<arr.length;i++){if(arr[i]!=0){return false;}}return true;}
2.力扣349
本题利用哈希表中的set结合解决此问题,遍历第一个数组,将结果存进set中,然后遍历第二个数组,若set结合中出现次元素,则存进结果set结合中,达到结果去重的效果。
解题步骤:
- 定义两个set,第一个set对nums1数组进行去重存储,第二个set存结果集
- 首先遍历nums1将结果存进set中
- 再遍历nums2,判断此数值在set中是否出现,若出现则存进结果集中
- 将set集合转为数组
代码如下:
public int[] intersection(int[] nums1, int[] nums2) {Set<Integer> temp = new HashSet();Set<Integer> res = new HashSet();for(int i=0;i<nums1.length;i++){temp.add(nums1[i]);}for(int i=0;i<nums2.length;i++){if(temp.contains(nums2[i])){res.add(nums2[i]);}}return res.stream().mapToInt(x -> x).toArray();}
3.力扣202
本题利用哈希表中的set集合进行去重存储,以此防止死循环产生,在每次循环的时候怕判断此数是否出现在set中,若出现则表示死循环产生,并退出。
解题步骤:
- 首先判断此数是否出现在set中,若出现则表示死循环产生,并退出。
- 若没出现则将次数分解平方,返回数值,进行下次循环
代码如下:
public boolean isHappy(int n) {HashSet<Integer> set = new HashSet();while(n!=1&&!set.contains(n)){set.add(n);n=getNextNumber(n);}return n==1;}public int getNextNumber(int n) {int res = 0;while(n>0){int temp = n%10;res+=temp*temp;n=n/10;}return res;}
4.力扣1
本题利用哈希表中的map集合,这题不仅要判断是否出现过,且要返回元素对应得下标。
解题步骤:
- 首先定义一个map集合,key:存放元素得值,value:存放元素下标
- 利用for循环遍历整个数组
- 判断target-nums【i】是否出现在map中,若出现直接返回下标值
代码如下:
public int[] twoSum(int[] nums, int target) {HashMap<Integer,Integer> map = new HashMap();for(int i=0;i<nums.length;i++){int mid = target-nums[i];if(map.containsKey(mid)){return new int[]{i,map.get(mid)};}map.put(nums[i],i);}return null;}
day5有效字母得移位两个数组的交集快乐数两个数之和相关推荐
- 小白刷代码随想录day6 -- 242.有效的字母异位词,349.两个数组的交集,202快乐数,1.两数之和
今天是刷代码随想录的day6.昨天day5元宵节休息日.今天开始了哈希表部分.对于哈希表的内容之前没有怎么学习过,所以今天的刷题主要以学习方法为主.待二刷的时候争取能够手撕代码! 哈希法 首先一个大前 ...
- 反转字符串、反转字符串中的元音字母、两个数组的交集,springboot工作原理面试
小编菜解 public static String reverseVowels(String s) { List list = new ArrayList() {{ add('a'); add('e' ...
- 算法训练Day6 | LeetCode:242. 有效的字母异位词(数组作哈希表);349. 两个数组的交集(Set作哈希表);202.快乐数 (Set作哈希表);1. 两数之和(Map作哈希表)
目录 LeetCode242. 有效的字母异位词 方法:数组作哈希表 1. 思路 2. 代码实现 3. 复杂度分析 4. 思考 Leetcode349. 两个数组的交集 方法一:用Set作HashMa ...
- 两个数组的交集 II
两个数组的交集 II 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2,2] 示例 2: 输入:nums1 ...
- 350. Intersection of Two Arrays II 两个数组的交集 II
Title 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例 2: 输入: nums1 = ...
- java合并两个数组_「JAVA」两个数组的交集—力扣每日一题(一)
示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例 2: 输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4] ...
- Leetcode-数据结构-350. 两个数组的交集 II
问题 给两个整数数组 nums1 和 nums2 ,请以 数组形式 返回两数组的 交集 (其在交集中出现的次数:等于该数字在两个数组中出现次数的最小值). 返回结果中 每个元素出现的次数(for遍历) ...
- L349. L350两个数组的交集
两个数组的交集 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2] 示例 2: 输入: nums1 = ...
- Day 06 | 242.有效的字母异位词 349. 两个数组的交集 202.快乐数 1. 两数之和
这四道题之前都做过!比第一次顺利一些,不过还是得看题解,磕磕绊绊的.不过我相信坚持下去一定会越来越好滴! 242.有效的字母异位词 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的 ...
最新文章
- java 基础知识八 正则表达式
- WEB应用之网页数据分析工具
- c3p0、dbcp、druid三大连接池对比
- 操作系统(四)操作系统的运行机制
- 清华大学人工智能研究院成立智能信息获取研究中心
- python给出数据点进行插值_Python对数据进行插值和下采样的方法
- 关于Dapper实现读写分离的个人思考
- leetcode 455. 分发饼干(贪心算法)
- 【ES6】let命令、const命令、解构赋值
- jdk自带压测工具_jstack性能分析工具
- mysql 分组统计 取最大值_(Mysql)sql分组取最大值问题
- 【数学建模】CUMCM-2010A 储油罐的变位识别与罐容表标定 解题思路整理
- D版力控加密狗使用有感
- web网页设计实例作业 ——中国茶文化(6页) 茶文化网页制作作业_中国化(网页设计...
- 花生壳内网发布外网可以访问的网站
- ssh-keygen认证密钥
- 数据库上机实验一、二
- VC++ 中主线程等待子线程结束的方法
- 计算机点击应用时总是跳到顶端,电脑总是跳出当前应用程序
- Appium 自动化测试 手机操作