LeetCode Day 54

No.160 GetIntersectionNode 相交链表

题目

  • 编写一个程序,找到两个单链表相交的起始节点。
  • 如下面的两个链表:
  • 在节点 c1 开始相交。

示例

  • 输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3
  • 输出:Reference of the node with value = 8
  • 输入解释:相交节点的值为 8 (注意,如果两个列表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1,8,4,5]。在 A 中,相交节点前有 2 个节点;在 B 中,相交节点前有 3 个节点。

  • 输入:intersectVal = 2, listA = [0,9,1,2,4], listB = [3,2,4], skipA = 3, skipB = 1
  • 输出:Reference of the node with value = 2
  • 输入解释:相交节点的值为 2 (注意,如果两个列表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [0,9,1,2,4],链表 B 为 [3,2,4]。在 A 中,相交节点前有 3 个节点;在 B 中,相交节点前有 1 个节点。

  • 输入:intersectVal = 0, listA = [2,6,4], listB = [1,5], skipA = 3, skipB = 2
  • 输出:null
  • 输入解释:从各自的表头开始算起,链表 A 为 [2,6,4],链表 B 为 [1,5]。由于这两个链表不相交,所以 intersectVal 必须为 0,而 skipA 和 skipB 可以是任意值。
  • 解释:这两个链表不相交,因此返回 null。

注意

  • 如果两个链表没有交点,返回 null.
  • 在返回结果后,两个链表仍须保持原有的结构。
  • 可假定整个链表结构中没有循环。
  • 程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。

思路

代码

No.161 IsOneEditDistance 相隔为 1 的编辑距离

题目

  • 给定两个字符串 s 和 t,判断他们的编辑距离是否为 1。

  • 注意满足编辑距离等于 1 有三种可能的情形:

  • 往 s 中插入一个字符得到 t
  • 从 s 中删除一个字符得到 t
  • 在 s 中替换一个字符得到 t

示例

  • 输入: s = "ab", t = "acb"
  • 输出: true
  • 解释: 可以将 'c' 插入字符串 s 来得到 t。

  • 输入: s = "cab", t = "ad"
  • 输出: false
  • 解释: 无法通过 1 步操作使 s 变为 t。

  • 输入: s = "1203", t = "1213"
  • 输出: true
  • 解释: 可以将字符串 s 中的 '0' 替换为 '1' 来得到 t。

思路

代码

No.162 FindPeakElement 寻找峰值

题目

  • 峰值元素是指其值大于左右相邻值的元素。

  • 给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。

  • 数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。

  • 你可以假设 nums[-1] = nums[n] = -∞。

示例

  • 输入: nums = [1,2,3,1]
  • 输出: 2
  • 解释: 3 是峰值元素,你的函数应该返回其索引 2。

  • 输入: nums = [1,2,1,3,5,6,4]
  • 输出: 1 或 5
  • 解释: 你的函数可以返回索引 1,其峰值元素为 2;或者返回索引 5, 其峰值元素为 6。

说明

  • 你的解法应该是 O(logN) 时间复杂度的。

思路

  • O(logN) 复杂度肯定是二分,因为光遍历一次数组都时间都要O(n)复杂度。

代码

猜你喜欢

转载自www.cnblogs.com/zenronphy/p/12364973.html