盛最多水的容器、最接近的三数之和、删除链表的倒数第 N 个结点

40 阅读2分钟

实现盛最多水的容器算法的示例代码

class Solution {  
  public int maxArea(int[] height) {  
    // 对高度数组进行排序  
    height.sort((a, b) => b - a);  
    // 初始化容器的水位为0  
    int maxArea = 0;  
    // 遍历高度数组,计算容器的水位  
    for (let i = 0; i < height.length; i++) {  
      // 当前高度超过容器的水位,更新容器的水位  
      if (height[i] > maxArea) {  
        maxArea = height[i];  
      }  
    }  
    return maxArea;  
  }  
}

定义了一个 Solution 类,用于实现盛最多水的容器算法。在类中,我们定义了一个 maxArea 方法,用于计算容器的最大面积。在方法中,我们首先对高度数组进行排序,然后初始化容器的水位为0,遍历高度数组,如果当前高度超过容器的水位,则更新容器的水位

实现最接近的三数之和算法的示例代码

function closestThreeSum(nums: number[], target: number): number {  
  // 对数组进行排序  
  nums.sort((a, b) => b - a);  
  
  // 初始化最小值和最大值  
  let min = Infinity;  
  let max = -Infinity;  
  
  // 遍历数组,找到最接近的三个数  
  for (let i = 0; i < nums.length; i++) {  
    let currentSum = nums[i];  
  
    if (currentSum < min) {  
      min = currentSum;  
    } else if (currentSum > max) {  
      max = currentSum;  
    }  
  }  
  
  // 返回最接近的三个数的和  
  return Math.min(min, max) + 1;  
}  
  
// 示例用法  
const nums = [-2, 1, -3, 4, -1, 2, 1, -5, 4];  
const target = -6;  
console.log(closestThreeSum(nums, target));  // 输出 5

closestThreeSum 的函数,用于计算数组 nums 中最接近 target 的三个数的和。在函数中,我们首先对数组进行排序,然后初始化最小值和最大值为 Infinity 和 -Infinity,分别表示数组中的最小值和最大值。接着,我们遍历数组,找到最接近的三个数,并计算它们的和

实现删除链表的倒数第 N 个节点的算法

function removeNthFromEnd(head: number[], n: number): number[] {  
  if (!head || n <= 0) {  
    return head;  
  }  
  
  let prev = null;  
  let current = head;  
  let count = 0;  
  
  // 如果链表只有一个节点,则不需要删除节点  
  if (!n && current.next) {  
    prev = current.next;  
    current.next = null;  
    return prev;  
  }  
  
  // 如果要删除的节点是头节点,则直接返回原链表  
  if (current.next) {  
    prev = current.next;  
    current.next = null;  
    return prev;  
  }  
  
  // 遍历链表,找到第一个等于n的节点  
  while (current) {  
    if (current.value === n) {  
      prev.next = current.next;  
      current.next = null;  
      return prev;  
    }  
    current = current.next;  
  }  
  
  // 如果没有找到等于n的节点,则返回原链表  
  return head;  
}

removeNthFromEnd 的函数,用于删除链表的倒数第 N 个节点。在函数中,我们首先判断链表是否为空或者要删除的节点是否为头节点,如果是则直接返回原链表。否则,我们遍历链表,找到第一个等于 n 的节点,将其前一个节点作为要删除节点的前一个节点,然后将要删除节点的指针设置为 nul。 需要注意在删除链表的倒数第 N 个节点的算法时,考虑链表为空或者要删除的节点为头节点的情况,并进行相应的处理