2021-05-19

刷题笔记02:今天将前几天刷的一道题才解决掉,感觉挺有收获的leetcode 1865题:题目描述如下输入示例:题目数据范围:解题思路:1.刚一看题,先设数组1为A,数组2为B。那么题目的意思就是求A[i]+B[j]=C时,一共有多少种组合情况。感觉很简单,这直接for循环就结束了呀。再一看这好歹是个中等题,哪能这么简单。一看数据量,就明白了,数组的长度和操作的数量和元素的值都很大,用暴力搜索肯定行不通;2.针对长的无序数组,且有重复元素时,索引其每个元素,首先想到将其用HashMap来存
摘要由CSDN通过智能技术生成

刷题笔记02:今天将前几天刷的一道题才解决掉,感觉挺有收获的

leetcode 1865题:题目描述如下
在这里插入图片描述
输入示例:
在这里插入图片描述
题目数据范围:
在这里插入图片描述

解题思路:
1.刚一看题,先设数组1为A,数组2为B。那么题目的意思就是求A[i]+B[j]=C时,一共有多少种组合情况。感觉很简单,这直接for循环就结束了呀。再一看这好歹是个中等题,哪能这么简单。一看数据量,就明白了,数组的长度和操作的数量和元素的值都很大,用暴力搜索肯定行不通;
2.针对长的无序数组,且有重复元素时,索引其每个元素,首先想到将其用HashMap来存储,这样在索引时就能提升效率,整体思路就是这样;
3.首先在FindSumPairs(nums1,nums2)中进行初始化,即一些赋初值的操作,这里主要的步骤就是将数组2转存到HashMap里。关于这里,也有一些需要注意的东西,如果你要把每个元素的索引存下来,那就要用HashMap<Integer,HashSet>来存,结果在提交时,就会发现超时了;因为题目中给的输入里是有对数组2元素进行某位置元素加的操作。所以,如果连索引都存,那每次改变数组2的元素,我们也要对应改变map里的value,这里要先删除在改变,每次都需要2次调用方法,即:

1.map.get(value).remove(index);//即该index位置的元素改变,需要将之前存到map里的索引去掉
2.map.put(value,set);//再将新值的索引添加到map里;这里是简写了,具体的代码就不重复了

可以看到这样写的话,在大量输入时,是很耗费时间的。所以,就需要转换思路:题目只是要统计满足条件的角标对数量,又不需要输出他们的索引,所以只需要记录数组2中每个元素出现的次数,存到map中即可。就能节省大量时间。

代码实现如下:

class FindSumPairs {
   
    private int[] nums1;
    private int[
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值