返回
LeroCode编程备忘录
前端
2024-01-10 23:58:46
力扣 (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;
};
刷题打卡的心得
刷题打卡是提高编程技能的有效方法之一。通过定期练习,我们可以巩固所学的知识,并发现自己的薄弱之处。
在刷题打卡时,我们可以使用多种方法来帮助自己。我们可以使用纸笔来记录下我们的解题思路,或者使用在线工具来记录下我们的代码。我们还可以与其他程序员分享我们的解题思路,并互相学习。
刷题打卡并不是一蹴而就的事情,它需要长期的坚持和努力。只要我们坚持不懈,相信我们一定能够取得进步。