【2024.01.02】刷算法07
2024-01-08 11:14:52
新年首刷
三数之和
感想
说实话我看到这个题目的时候第一个想法就是用四数相加去解决,但是确实没有读题目的完全意思
用的方法是双指针法
假定有三个指针
我们希望找到所有不同的三元组 [nums[i], nums[j], nums[k]]
,使得 nums[i] + nums[j] + nums[k] == 0
。下面是这个函数如何处理这个数组的:
步骤 1: 对数组进行排序
排序后的数组将是:
nums = [-4, -1, -1, 0, 1, 2]
排序是为了方便后续使用双指针技术,并且能更容易地跳过重复的元素。
步骤 2: 遍历数组
外层循环从索引 i = 0
开始直到 nums.length - 2
(因为我们需要至少三个数来形成三元组)。
迭代 1: i = 0
(nums[i] = -4
)
- 左指针
left = 1
,右指针right = 5
(分别指向-1
和2
)。 - 这里不会找到和为零的三元组,因为最小的数已经是
-4
。
迭代 2: i = 1
(nums[i] = -1
)
- 左指针
left = 2
,右指针right = 5
(分别指向-1
和2
)。 - 第一次三数之和为
0
:-1 + (-1) + 2 = 0
。添加三元组[-1, -1, 2]
到结果中。 - 左右指针向内移动,跳过重复的
-1
。
接下来的迭代
- 继续以同样的方式处理,直到
i
达到nums.length - 2
。 - 当
i = 2
时(第二个-1
),由于它与前一个元素相同,会被跳过(避免重复的三元组)。
步骤 3: 返回结果
最终结果将是所有找到的不重复的三元组,对于这个示例,结果是:
[[-1, -1, 2], [-1, 0, 1]]
这个结果表明在数组 [-4, -1, -1, 0, 1, 2]
中,这两个三元组的和为零,并且不包含重复的三元组。
三数之和和四数之和都是为了找不同索引且之和相同的数组
?151. 反转字符串中的单词
?字符串转数组
在 JavaScript 中,将字符串转换为数组的方法主要有以下几种:
-
使用
split
方法:- 这是最常用的方法。
split
方法可以将字符串按照指定的分隔符拆分成数组。如果要将每个字符都分开成数组元素,可以使用空字符串作为分隔符。 - 示例:
let arr = str.split('');
- 这是最常用的方法。
-
使用扩展运算符
...
:- 扩展运算符可以将字符串中的每个字符展开到数组中。
- 示例:
let arr = [...str];
-
使用
Array.from
方法:Array.from
方法可以将两类对象转换为数组:类数组对象(拥有length
属性和若干索引属性的任意对象)和可迭代对象(包括ES6
新增的数据类型Set
和Map
)。- 示例:
let arr = Array.from(str);
-
使用
Object.assign
方法:Object.assign
方法可以用来将字符串转换为数组,但这种方法相对不太直观。- 示例:
let arr = Object.assign([], str);
-
循环遍历字符串:
- 通过循环遍历字符串的每个字符,并将它们逐个添加到数组中。
- 示例:
let arr = []; for (let i = 0; i < str.length; i++) { arr.push(str[i]); }
文章来源:https://blog.csdn.net/TTTT2222111/article/details/135348915
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!