力扣(LeetCode)初级算法第二弹(6~10)

6 两个数组的交集 II

给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。

示例 1:

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

输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[4,9]

题目的要求就是找出两个数组中相同的元素。我们可以考虑使用双指针的方法,对两个数组进行排序然后指针进行遍历,由于已经排过序只用判断两个指针对应的值的大小就能完成遍历,再将判断好的两个值相等的元素加入list中。最后强制类型转换输出就好。

eg:上面大下面加,一样的是时候两个都加,下面大上面加。

代码实现:

7 加一

给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。

你可以假设除了整数 0 之外,这个整数不会以零开头。

示例1:

输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。
示例 2:

输入:digits = [4,3,2,1]
输出:[4,3,2,2]
解释:输入数组表示数字 4321。
示例 3:

输入:digits = [0]
输出:[1]

这个题其实不用把他当成数组看而是直接当成几个数字构成的一个数字,我们去给他进行加法的加一就行了。想是这么想我们实现的时候还是用数组去实现。

1,如果不是9我们就直接加,

2,如果是9我们就把那一个元素变成0,把下一个元素加1。

3,当出现99....99这种情况我们获取原数组的长度,新建一个数组并给第一个元素赋值为1.

代码实现

 8 移动零

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

请注意 ,必须在不复制数组的情况下原地对数组进行操作。

示例 1:

输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]
示例 2:

输入: nums = [0]
输出: [0]

这题的要求也很清晰,就是找到数组中的0,把他们放到末尾去。

这个题也可以用双指针来实现,j指针负责遍历数组,i指针遇到0++,

代码实现:

 

 9 两数之和

给定一个整数数组 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个for循环并进行判断就行,这题我们用HashMap键值对的方法求解。Key就是数组的元素,Value就是数组的下标,我们遍历数组传入值和下标,一边传一边判断如果key=(目标值-当前元素值)不为空我们就返回这两个数就行,否则返回{0,0}。

代码实现

 10 有效的数独
请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。

数字 1-9 在每一行只能出现一次。
数字 1-9 在每一列只能出现一次。
数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。

 这题说实话我第一次没做出来,这个题用的官方的解题思路,

9宫格数独大家都玩过吧,就是每行,每列以及对应3*3的单元格内只能有1-9这9个数字,并且不能有重复的。

我们首先遍历9宫格的所有元素,然后使用3个二维数组遍历,记录对应的行,列以及3*3单元格是否有某个数字,如果出现冲突,直接返回false。大致思路就是这样这里只对里面的一个语句解释一下,注释说得不是很好

减一前面那一步确实是转化成数字,但是这并不是当成数字来使用的而是作为key,也就是下标来使用的,下面那个value是多少并没有什么关系,只要value重复就返回false所以是多少并没有什么关系。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天海奈奈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值