返回

LeroCode编程备忘录

前端

力扣 (LeetCode) 是一个广受欢迎的在线编程练习平台,它提供了大量具有挑战性的编程问题供用户练习。这些问题涵盖了各种编程语言和技术栈,并且难度各异,非常适合不同水平的程序员。

这份备忘录将介绍如何在力扣平台上解决两道经典编程问题:合并两个有序链表和删除排序数组中的重复项。这两道题都是算法和数据结构面试中的常见题,掌握它们对于程序员来说非常重要。

合并两个有序链表

合并两个有序链表是力扣平台上的一道经典编程题。它的目的是将两个升序排列的链表合并为一个新的升序链表。

使用递归来解决这个问题是一个非常简洁优雅的方法。我们可以将两个链表头部较小的一个与剩下的元素合并,并返回排好序的链表头。当两条链表都为空时,我们返回一个空链表。

/**
 * 合并两个有序链表
 *
 * @param {ListNode} l1 有序链表1
 * @param {ListNode} l2 有序链表2
 * @return {ListNode} 合并后的有序链表
 */
const mergeTwoLists = (l1, l2) => {
  if (l1 === null) {
    return l2;
  }
  if (l2 === null) {
    return l1;
  }
  if (l1.val < l2.val) {
    l1.next = mergeTwoLists(l1.next, l2);
    return l1;
  } else {
    l2.next = mergeTwoLists(l1, l2.next);
    return l2;
  }
};

删除排序数组中的重复项

删除排序数组中的重复项是力扣平台上另一道经典编程题。它的目的是从一个排序数组中删除所有重复的元素,并返回一个只包含唯一元素的新数组。

我们可以使用双指针法来解决这个问题。两个指针分别指向数组的开头和下一个非重复元素。当我们遇到一个非重复元素时,我们就将它复制到下一个非重复元素的位置,然后将下一个非重复元素指针向前移动一位。

/**
 * 删除排序数组中的重复项
 *
 * @param {number[]} nums 排序数组
 * @return {number} 不包含重复项的新数组的长度
 */
const removeDuplicates = (nums) => {
  if (nums === null || nums.length === 0) {
    return 0;
  }
  let i = 0;
  for (let j = 1; j < nums.length; j++) {
    if (nums[j] !== nums[i]) {
      i++;
      nums[i] = nums[j];
    }
  }
  return i + 1;
};

刷题打卡的心得

刷题打卡是提高编程技能的有效方法之一。通过定期练习,我们可以巩固所学的知识,并发现自己的薄弱之处。

在刷题打卡时,我们可以使用多种方法来帮助自己。我们可以使用纸笔来记录下我们的解题思路,或者使用在线工具来记录下我们的代码。我们还可以与其他程序员分享我们的解题思路,并互相学习。

刷题打卡并不是一蹴而就的事情,它需要长期的坚持和努力。只要我们坚持不懈,相信我们一定能够取得进步。