力扣哈希表篇

以下解题思路来自代码随想录以及力扣官方

文章目录

      • 242.有效的字母异位词
      • 349.两个数组的交集
      • 202.快乐数
      • 1.两数之和
      • 15.三数之和

242.有效的字母异位词

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

输入: s = "anagram", t = "nagaram"
输出: true输入: s = "rat", t = "car"
输出: false
class Solution {public boolean isAnagram(String s, String t) {int[] record = new int[26];for (int i = 0; i < s.length(); i++) {record[s.charAt(i) - 'a']++;}for (int i = 0; i < t.length(); i++) {record[t.charAt(i) - 'a']--;}for (int count : record) {if (count != 0) {return false;}}return true;}
}

力扣官方题解使用排序方式也很简单

class Solution {public boolean isAnagram(String s, String t) {if (s.length() != t.length()) {return false;}char[] str1 = s.toCharArray();char[] str2 = t.toCharArray();Arrays.sort(str1);Arrays.sort(str2);return Arrays.equals(str1, str2);}
}

349.两个数组的交集

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

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

这道题思路还是比较容易理解的。

class Solution {public int[] intersection(int[] nums1, int[] nums2) {if (nums1 == null || nums1.length == 0 || nums2 == null || nums2.length == 0) {return new int[0];}// 这道题我们使用哈希来做// 首先创建两个哈希表HashSet<Integer> set = new HashSet();HashSet<Integer> result = new HashSet();// 将nums1中的元素全部添加进去for (int i = 0; i < nums1.length; i++) {set.add(nums1[i]);}for (int i = 0; i < nums2.length; i++) {// 如果包含说明它们共同存在,加入resultif (set.contains(nums2[i])) {result.add(nums2[i]);}}// 需要将哈希表转换成int数组return result.stream().mapToInt(x -> x).toArray();}
}

202.快乐数

编写一个算法来判断一个数 n 是不是快乐数。
定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。如果 n 是快乐数就返回 True ;不是,则返回 False 。

输入:n = 19
输出:true
解释:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1输入:n = 2
输出:false
class Solution {public boolean isHappy(int n) {Set<Integer> set = new HashSet();while (n != 1 && !set.contains(n)) {set.add(n);n = getNum(n);}return n == 1;}//获取数字平方和public int getNum(int n){int sum = 0;while(n>0){int temp = n%10;sum+=temp * temp;n = n/10;}return sum;}
}

1.两数之和

给定一个整数数组 nums 和一个目标值target,请你在该数组中找出和为目标值的那 两个整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

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

我开始的解法,太垃圾了哈哈哈。

class Solution {public int[] twoSum(int[] nums, int target) {int[] res = new int[2];// 首先判断数组是否合规if (nums == null || nums.length == 0) {return new int[2];}HashMap<Integer, int[]> map = new HashMap();for (int i = 0; i < nums.length; i++) {for (int j = i + 1; j < nums.length; j++) {res[0] = i;res[1] = j;map.put(nums[i] + nums[j], res);if (map.containsKey(target)) {return map.get(target);}}}return new int[2];}
}

下面是力扣官方题解,

class Solution {public int[] twoSum(int[] nums, int target) {Map<Integer, Integer> hashtable = new HashMap<Integer, Integer>();for (int i = 0; i < nums.length; ++i) {if (hashtable.containsKey(target - nums[i])) {return new int[]{hashtable.get(target - nums[i]), i};}hashtable.put(nums[i], i);}return new int[0];}
}

15.三数之和

输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]
解释:
nums[0] + nums[1] + nums[2] = (-1) + 0 + 1 = 0 。
nums[1] + nums[2] + nums[4] = 0 + 1 + (-1) = 0 。
nums[0] + nums[3] + nums[4] = (-1) + 2 + (-1) = 0 。
不同的三元组是 [-1,0,1][-1,-1,2] 。
注意,输出的顺序和三元组的顺序并不重要。输入:nums = [0,1,1]
输出:[]
解释:唯一可能的三元组和不为 0 。输入:nums = [0,0,0]
输出:[[0,0,0]]
解释:唯一可能的三元组和为 0

有点难,下面题解是点赞第一的题解,还是很有思考性的。

class Solution {//定义三个指针,保证遍历数组中的每一个结果//画图,解答public List<List<Integer>> threeSum(int[] nums) {//定义一个结果集List<List<Integer>> res = new ArrayList<>();//数组的长度int len = nums.length;//当前数组的长度为空,或者长度小于3时,直接退出if(nums == null || len <3){return res;}//将数组进行排序Arrays.sort(nums);//遍历数组中的每一个元素for(int i = 0; i<len;i++){//如果遍历的起始元素大于0,就直接退出//原因,此时数组为有序的数组,最小的数都大于0了,三数之和肯定大于0if(nums[i]>0){break;}//去重,当起始的值等于前一个元素,那么得到的结果将会和前一次相同if(i > 0 && nums[i] == nums[i-1]) continue;int l = i +1;int r = len-1;//当 l 不等于 r时就继续遍历while(l<r){//将三数进行相加int sum = nums[i] + nums[l] + nums[r];//如果等于0,将结果对应的索引位置的值加入结果集中if(sum==0){// 将三数的结果集加入到结果集中res.add(Arrays.asList(nums[i], nums[l], nums[r]));//在将左指针和右指针移动的时候,先对左右指针的值,进行判断//如果重复,直接跳过。//去重,因为 i 不变,当此时 l取的数的值与前一个数相同,所以不用在计算,直接跳while(l < r && nums[l] == nums[l+1]) {l++;}//去重,因为 i不变,当此时 r 取的数的值与前一个相同,所以不用在计算while(l< r && nums[r] == nums[r-1]){r--;} //将 左指针右移,将右指针左移。l++;r--;//如果结果小于0,将左指针右移}else if(sum < 0){l++;//如果结果大于0,将右指针左移}else if(sum > 0){r--;}}}return res;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/710062.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数仓开发环境链接

这里写目录标题 1开发工具链接大数据组件1.1 启动hiveserver21.2配置DataGrip连接1.3测试使用 2 环境问题排查思路 1开发工具链接大数据组件 1.1 启动hiveserver2 数仓开发工具datagrip 需要用到JDBC协议链接到Hive&#xff0c;需要启动hiveserver2。 cd /opt/module/hive h…

Vue项目中,src目录下的vue.app文件介绍

在 Vue 项目中&#xff0c;src 文件夹通常包含了项目的核心代码。在这个文件夹下&#xff0c;App.vue 是一个特殊的文件&#xff0c;它代表了整个 Vue 应用的根组件。 App.vue 是一个单文件组件&#xff08;Single File Component, 简称 SFC&#xff09;&#xff0c;它允许你将…

c语言day4 运算符 表达式 三大控制结构

1&#xff1a; 2&#xff1a; 输入一个年月日 计算这是这一年的第几天 17 int year,month,day;18 printf("请输入年份 月份 日期");19 scanf("%d %d %d",&year,&month,&day);20 int feb28;21 if(year%40&&year%1…

周鸿祎首堂免费课与千万网友分享“AGI趋势”

“我讲课不割韭菜&#xff0c;宗旨是免费、分享、科普、交流。AI时代技术发展迅速&#xff0c;AI知识普及尤为重要。”2月29日&#xff0c;360公司创始人周鸿祎免费课正式开启&#xff0c;全网多平台直播了AI系列第一讲“预见AGI”&#xff0c;千万网友观看。免费课上&#xff…

BUUCTF crypto做题记录(11)新手向

一、[HDCTF2019]bbbbbbrsa 题目所给的信息我汇总到以下代码中 from base64 import b64encode as b32encode from gmpy2 import invert,gcd,iroot from Crypto.Util.number import * from binascii import a2b_hex,b2a_hex import randomflag "************************…

[Flutter]倒计时和计时器

1.延迟执行 Future.delayed 使用Future.delayed可以在延迟一定时间后执行代码。这是实现延迟执行最简单的方式之一。 Future.delayed(Duration(seconds: 1), () {// 这里的代码会在1秒后执行print(This message is displayed after 1 second.); }); Timer Timer类提供了更…

20240227-Python Tkinter学习笔记

文章目录 Label标签Label标签和Button按钮Listbox列表Radiobutton单选按钮Scale滑动条Checkbutton多选框Canvas画布Menubar 菜单Frame框架Messagebox弹窗pack/grid/place 布局方式登录注册案例 Label标签 import tkinter as tk # 导入tkinter模块&#xff0c;并简写为tk# 创建…

mysql数据库安装与使用(一)

目录 前言 一&#xff0c;安装mysql数据库 二&#xff0c;mysql数据库使用 连接mysql数据库 创建数据库 创建表格 插入数据 查询数据 更新数据 删除数据 关闭连接 使用数据库 查看所有数据库 查看数据库中的表 三&#xff0c;mysql设置 创建用户 授予权限 刷新权…

全量知识系统问题及SmartChat给出的答复 之3

Q8. 进一步&#xff0c;请展示如何使用这些技术来衡量、评估或适应不可避免的不匹配的知识汤问题的更进一步的全面代码。 为了处理不可避免的不匹配的知识汤问题&#xff0c;我们可以引入一些技术方法来衡量、评估或适应这种情况。 下是一个更进一步的全面代码示例&#xff0…

代码随想录算法训练营Day30|332.重新安排行程、51. N皇后、37. 解数独

332.重新安排行程 题目链接&#xff1a;332.重新安排行程 文档链接&#xff1a;332.重新安排行程 C实现 class Solution { private:unordered_map<string,map<string,int>> targets;bool backtracking(int ticketNum, vector<string>& result) {if(resu…

怎么制作文件类型二维码?文件二维码如何加密?

现在将文件转二维码图片后&#xff0c;分享生成二维码来扫码查看或者下载文件的方式&#xff0c;在很多的场景中都有应用。这个方法的优势在于&#xff0c;成本低而且安全性高&#xff0c;有利于用户快速获取内容的速度&#xff0c;有效提高用户体验&#xff0c;而且日常使用的…

【Kubernetes】服务(Service)是什么?有什么用?有哪些类型?

系列文章目录 K8s中的Namespace是什么&#xff1f; Kubernetes 集群的组件介绍 Kubernetes 对象是什么&#xff1f; Pod——k8s中最重要的对象之一 Kubernetes 和 Docker 之间有什么区别&#xff1f; 部署安装 K8s 为什么要关闭 swap 分区&#xff1f; k8s中容器之间、pod之间…

ZABBIX修改web界面的 “支持“,“帮助”,“Integrations“。等菜单按钮,百试百灵,删除修改Help,Support菜单

♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ **ZABBIX修改web界面的 “支持”&#xff0c;“帮助”,“Integrations”。等菜单按钮&#xff0c…

基于 Transformer 的中文对联生成器

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

javaWeb学习04

AOP核心概念: 连接点: JoinPoint, 可以被AOP控制的方法 通知: Advice 指哪些重复的逻辑&#xff0c;也就是共性功能(最终体现为一个方法) 切入点: PointCut, 匹配连接点的条件&#xff0c;通知仅会在切入点方法执行时被应用 目标对象: Target, 通知所应用的对象 通知类…

模糊PID控制算法实战讲解-案例温度控制(附C语言实现)

可结合之前的文章一起理解&#xff1a; 控制算法-PID算法总结-从公式原理到参数整定解析&#xff08;附C源码&#xff09;_pid自整定算法-CSDN博客 模糊控制算法实战讲解-案例温度控制&#xff08;附C语言实现&#xff09;-CSDN博客 目录 一、模糊PID控制的原理 1.1 模糊化…

边读 Emacs Lisp Intro 边做题(五)

文章目录 边读Emacs Lisp Intro边做题&#xff08;五&#xff09; 边读Emacs Lisp Intro边做题&#xff08;五&#xff09; 打开emacs&#xff0c;按C-h i打开Info页&#xff0c;找到Emacs Lisp Intro。 这里的\\b\\([^ \n\t]\\)[ \n\t]\\1\\b抄自题目描述中提供的链接&#…

Decision Transformer

DT个人理解 emmm, 这里的Transformer 就和最近接触到的whisper一样,比起传统Transformer,自己还设计了针对特殊情况的tokens。比如whisper里对SOT,起始时间,语言种类等都指定了特殊tokens去做Decoder的输入和输出。 DT这里的作为输入的Tokens由RL里喜闻乐见的历史数据:…

Java优先级队列--堆

目录 1. 优先级队列 1.1 概念 2.优先级队列的模拟实现 2.1 堆的概念 2.2 堆的存储方式 2.3 堆的创建 2.3.1 堆向下调整 2.3.2 堆的创建 2.3.3 建堆的时间复杂度 2.4 堆的插入与删除 2.4.1 堆的插入 2.4.2 堆的删除 2.5 用堆模拟实现优先级队列 3.常用接口介绍 3…

Eigen-Block块操作

Block块操作 一、使用块操作二、列和行三、Corner-related操作四、向量的块运算 块是矩阵或数组的矩形部分。块表达式既可以用作右值&#xff0c;也可以用作左值。与通常的Eigen表达式一样&#xff0c;只要让编译器进行优化&#xff0c;这种抽象的运行时成本为零。优化都是自动…