237. 删除链表中的节点
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。
现有一个链表 – head = [4,5,1,9],它可以表示为:
![]()
【DW组队学习—LeetCode】day16237. 删除链表中的节点238. 除自身以外数组的乘积292. Nim 游戏 【示例 1】输入:head = [4,5,1,9], node = 5 输出:[4,1,9]
解释:给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.
【示例 2】 输入:head = [4,5,1,9], node = 1 输出:[4,5,9]
解释:给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表应变为 4 -> 5 -> 9.
提示:
- 链表至少包含两个节点。
- 链表中所有节点的值都是唯一的。
- 给定的节点为非末尾节点并且一定是链表中的一个有效节点。
- 不要从你的函数中返回任何结果。
尝试思路:
将要删除的节点直接换成下一节点
代码:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def deleteNode(self, node):
"""
:type node: ListNode
:rtype: void Do not return anything, modify node in-place instead.
"""
node.val = node.next.val
node.next = node.next.next
238. 除自身以外数组的乘积
给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除
nums[i] 之外其余各元素的乘积。
【示例】输入: [1,2,3,4] 输出: [24,12,8,6]
提示: 题目数据保证数组之中任意元素的全部前缀元素和后缀(甚至是整个数组)的乘积都在 32 位整数范围内。
说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。
**进阶:**你可以在常数空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组不被视为额外空间。)
尝试思路1:暴力法
连乘时判断是否跳过当前元素
代码:
class Solution:
def productExceptSelf(self, nums: List[int]) -> List[int]:
result = []
for i in range(len(nums)):
a = 1
for j in range(len(nums)):
if i == j:
a = a
else:
a = a*nums[j]
result.append(a)
return result
【错误】复杂度较高,超时
292. Nim 游戏
你和你的朋友,两个人一起玩 Nim 游戏:
桌子上有一堆石头。 你们轮流进行自己的回合,你作为先手。 每一回合,轮到的人拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。
假设你们每一步都是最优解。请编写一个函数,来判断你是否可以在给定石头数量为 n 的情况下赢得游戏。如果可以赢,返回 true;否则,返回 false 。
【示例 1】输入:n = 4 输出:false
解释:如果堆中有 4 块石头,那么你永远不会赢得比赛;因为无论你拿走 1 块、2 块 还是 3 块石头,最后一块石头总是会被你的朋友拿走。
【示例 2】输入:n = 1 输出:true
【示例 3】输入:n = 2 输出:true
提示:
- 1 <= n <= 231 - 1
尝试思路:
若能被4整除,则赢不了
代码:
class Solution:
def canWinNim(self, n: int) -> bool:
return False if n % 4 == 0 else True