天天看点

【DW组队学习—LeetCode】day16237. 删除链表中的节点238. 除自身以外数组的乘积292. Nim 游戏

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
           
【DW组队学习—LeetCode】day16237. 删除链表中的节点238. 除自身以外数组的乘积292. Nim 游戏

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
           

【错误】复杂度较高,超时

【DW组队学习—LeetCode】day16237. 删除链表中的节点238. 除自身以外数组的乘积292. Nim 游戏

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
           
【DW组队学习—LeetCode】day16237. 删除链表中的节点238. 除自身以外数组的乘积292. Nim 游戏