算法

Posted by Chouvel on November 19, 2024

双指针-80

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/**
 * @param {number[]} nums
 * @return {number}
 */
var removeDuplicates = function(nums) {
// for (var i = 0; i < nums.length-2; i++) {
//         if (nums[i] === nums[i +2]) {
//             nums.splice(i,1)
//             i--
//         } 
//     }
//     return nums.length

    if(nums.length == 0)return false
    if(nums.length <3) return false
    let fast = 2,slow = 2;
    while(fast<nums.length){
        if(nums[slow-2]!==nums[fast]){
   
         nums[slow] = nums[fast]
            slow ++
        }
        ++fast
    }
    return slow
    // 最终数组是什么样子的,是有slow来决定的。
    // 快慢指针的精髓在于后面的给前面的替换掉,数据是减少的
}

回文数-9

纯字符串比较。

合并有序数组-88

合并两个有序数组的问题是一个常见的算法问题。给定两个从小到大排序的数组,要求将它们合并成一个有序数组。

以下是解决这个问题的步骤:

  1. 初始化指针:为两个数组分别初始化两个指针,指向各自数组的开始位置。
  2. 比较元素:比较两个指针所指向的元素,将较小的元素添加到新的数组中,并将该数组的指针向前移动一位。
  3. 移动指针:将较小元素所在数组的指针向前移动一位。
  4. 重复步骤2和3:直到其中一个数组的所有元素都被合并到新数组中。
  5. 处理剩余元素:如果一个数组的所有元素都已合并,将另一个数组的剩余元素直接添加到新数组的末尾。
  6. 返回结果:返回合并后的数组。

以下是JavaScript实现的示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/**
 * @param {number[]} nums1
 * @param {number} m
 * @param {number[]} nums2
 * @param {number} n
 * @return {void} Do not return anything, modify nums1 in-place instead.
 */
var merge = function(nums1, m, nums2, n) {
    // 从后向前合并,避免覆盖nums1中未处理的元素
    let i = m - 1; // nums1中最后一个元素的索引
    let j = n - 1; // nums2中最后一个元素的索引
    let k = m + n - 1; // 合并后数组的最后一个索引

    // 比较并合并数组
    while (i >= 0 && j >= 0) {
        if (nums1[i] > nums2[j]) {
            nums1[k] = nums1[i];
            i--;
        } else {
            nums1[k] = nums2[j];
            j--;
        }
        k--;
    }

    // 如果nums2还有剩余,直接复制到nums1前面
    while (j >= 0) {
        nums1[k] = nums2[j];
        k--;
        j--;
    }
};

在这段代码中,我们从后向前遍历两个数组,这样我们可以确保在将元素复制到 nums1 时不会覆盖 nums1 中尚未处理的元素。当一个数组的所有元素都被处理后,我们检查另一个数组是否有剩余元素,并将它们复制到 nums1 的前面。这种方法可以确保合并后的数组仍然是有序的。

27-移除元素

20241119001411

交替合并字符串

接受两个参数:两个字符串,把他们交替合并。 字符串的方法,concat,合并字符串;split传入空,按照空字符串来切割字符串,把字符串转成数组;作为可迭代数据类型,可以通过访问器传入索引的方式获取数据。

1
  

不知道理解的对不对:js中,对数组,字符串的操作算法;考察的是api的理解和一部分的算法逻辑知识。 大厂通常倾向于考察一些高级算法,例如图,树,动态规划之类。

两数之和,三数之和,使用双指针的方法。

两数之和:

二叉树的最近公共父节点,使用后序遍历。