当前位置: 首页 > news >正文

Day6 LeedCode: 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和

详细讲解移步:

Day6 LeedCode: 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和-CSDN博客

 

242. 有效的字母异位词

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。

注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。

示例 1:

输入: s = "anagram", t = "nagaram"
输出: true

示例 2:

输入: s = "rat", t = "car"
输出: false

提示:

  • 1 <= s.length, t.length <= 5 * 104
  • s 和 t 仅包含小写字母

进阶: 如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?

思考:本题中我们可以把字符串映射到一个大小26的数组上,记录每个字符出现的次数

我们不需要建立两个数组,我们只需要一个数组,映射第一个字符串时做加1操作,映射第二个字符串时做减1操作,如果数组中全为0,则它们为字母异位词

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

349. 两个数组的交集

给定两个数组 nums1 和 nums2 ,返回 它们的 交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。

示例 1:

输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]

示例 2:

输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]
解释:[4,9] 也是可通过的

提示:

  • 1 <= nums1.length, nums2.length <= 1000
  • 0 <= nums1[i], nums2[i] <= 1000

思路:

给nums1去重得到set(Set类型),遍历nums2,在set中如果包含nums2中的某个数,将这个数加入result(Set)中,将result转化为数组

class Solution {public int[] intersection(int[] nums1, int[] nums2) {Set <Integer> result= new HashSet<>();Set <Integer> set=new HashSet<>();for(int i=0;i<nums1.length;i++){set.add(nums1[i]);}for(int i=0;i<nums2.length;i++){if(set.contains(nums2[i])){result.add(nums2[i]);}}int[] array = result.stream().mapToInt(x -> x).toArray();return array;}
}

202. 快乐数

编写一个算法来判断一个数 n 是不是快乐数。

「快乐数」 定义为:

  • 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
  • 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
  • 如果这个过程 结果为 1,那么这个数就是快乐数。

如果 n 是 快乐数 就返回 true ;不是,则返回 false 。

示例 1:

输入:n = 19
输出:true
解释:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1

示例 2:

输入:n = 2
输出:false

提示:

  • 1 <= n <= 231 - 1

思路:

用Set记录下每次求平方和得到的新一个数,如果这个数以前出现过,就会导致循环,那么这个数一定不是快乐数

class Solution {public boolean isHappy(int n) {Set<Integer> set= new HashSet<>();while(n!=1){set.add(n);n=getSum(n);if(set.contains(n)){return false;}}return true;}public Integer getSum(int nums){int sum=0;while(nums>0){int i=nums%10;sum+=i*i;nums=nums/10;}return sum;}
}

1. 两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

示例 1:

输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

示例 2:

输入:nums = [3,2,4], target = 6
输出:[1,2]

示例 3:

输入:nums = [3,3], target = 6
输出:[0,1]

提示:

  • 2 <= nums.length <= 104
  • -109 <= nums[i] <= 109
  • -109 <= target <= 109
  • 只会存在一个有效答案

进阶:你可以想出一个时间复杂度小于 O(n2) 的算法吗?

思路:

遍历nums数组,题目给出满足要求的二元组只有一个,记录下之前出现过的数,如果当前遍历值+以前某个数=target,说明找到二元组,由于需要返回下标,用map记录,key=数值,value=下标

易错:

为什么不遍历一遍数组,记录下所有出现的数之后,然后再遍历一遍,查询target-nums[i]是否存在呢?

输入:nums = [3,3], target = 6 输出:[0,1] 时,在map中key=3只会出现一次,如果按照这种逻辑写,则会输出[1,1]

代码:

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

相关文章:

  • 关于软件设计模式的理解
  • HQL面试题练习 —— 合并数据
  • [Python]pyenv 环境配置
  • Selenium 库的爬虫实现
  • Host头攻击-使用加密和身份验证机制
  • git分支常用命令
  • Scrum 的速度如何衡量和提高
  • 单细胞 10X 和seurat对象学习
  • 视频推拉流EasyDSS系统如何在清理缓存文件的同时不影响缓存读写?
  • C++ 程序的基本要素
  • 通过JavaScript本地存储数据
  • HG/T 6088-2022 透水道路用涂料检测
  • 有限元法之有限元空间的构造
  • LeetCode2.两数相加
  • nodejs安装配置
  • __proto__ 和 prototype的关系
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 【技术性】Search知识
  • CentOS 7 防火墙操作
  • C学习-枚举(九)
  • Java 多线程编程之:notify 和 wait 用法
  • JavaScript设计模式与开发实践系列之策略模式
  • leetcode98. Validate Binary Search Tree
  • mysql innodb 索引使用指南
  • React-redux的原理以及使用
  • Redux 中间件分析
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • Sublime text 3 3103 注册码
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 力扣(LeetCode)22
  • 聊聊flink的TableFactory
  • 那些被忽略的 JavaScript 数组方法细节
  • 如何编写一个可升级的智能合约
  • 少走弯路,给Java 1~5 年程序员的建议
  • 什么软件可以剪辑音乐?
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 我的zsh配置, 2019最新方案
  • 原生 js 实现移动端 Touch 滑动反弹
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • scrapy中间件源码分析及常用中间件大全
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ​​​【收录 Hello 算法】9.4 小结
  • ​Benvista PhotoZoom Pro 9.0.4新功能介绍
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • $.ajax()
  • $.ajax()参数及用法
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (论文阅读11/100)Fast R-CNN
  • (转载)PyTorch代码规范最佳实践和样式指南
  • .a文件和.so文件
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息