【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(分别指向 -12)。
  • 这里不会找到和为零的三元组,因为最小的数已经是 -4
迭代 2: i = 1 (nums[i] = -1)
  • 左指针 left = 2,右指针 right = 5(分别指向 -12)。
  • 第一次三数之和为 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 中,将字符串转换为数组的方法主要有以下几种:

  1. 使用 split 方法

    • 这是最常用的方法。split 方法可以将字符串按照指定的分隔符拆分成数组。如果要将每个字符都分开成数组元素,可以使用空字符串作为分隔符。
    • 示例:let arr = str.split('');
  2. 使用扩展运算符 ...

    • 扩展运算符可以将字符串中的每个字符展开到数组中。
    • 示例:let arr = [...str];
  3. 使用 Array.from 方法

    • Array.from 方法可以将两类对象转换为数组:类数组对象(拥有 length 属性和若干索引属性的任意对象)和可迭代对象(包括 ES6 新增的数据类型 SetMap)。
    • 示例:let arr = Array.from(str);
  4. 使用 Object.assign 方法

    • Object.assign 方法可以用来将字符串转换为数组,但这种方法相对不太直观。
    • 示例:let arr = Object.assign([], str);
  5. 循环遍历字符串

    • 通过循环遍历字符串的每个字符,并将它们逐个添加到数组中。
    • 示例:
      let arr = [];
      for (let i = 0; i < str.length; i++) {
          arr.push(str[i]);
      }
      

文章来源:https://blog.csdn.net/TTTT2222111/article/details/135348915
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。