Datawhale|LeetCodeTencent Task16(lc237,238, 292)

237. Delete Node in a Linked List

Description

在这里插入图片描述

Analysis & Solution

数据结构里的基本操作。无法访问当前节点的前驱节点,我们就不能“直接”删除当前节点。我们可以用当前节点存储其后继节点的值。然后删除后继节点,就间接实现了节点删除。

Code

void deleteNode(ListNode* node)
{
    ListNode *next = node->next;
    node->val = next->val;
    node->next = next->next;
}

时间复杂度为 O ( 1 ) O(1) O(1)

238. Product of Array Except Self

Description

在这里插入图片描述

Analysis & Solution

首先最朴素的想法是求出输入所有元素的乘积product,output中每一位即乘积product除以当前nums[i]即可。但是如果nums中出现0,这种方法就不可行了。
我们可以对nums的每个元素算两个值,第一个是其左边元素的积,从左向右遍历一次即可;第二个是其右边元素的积,从右向左遍历。最后每个元素的左右积相乘即为最终结果。

Code

vector<int> productExceptSelf(vector<int>& nums)
{
    int n = nums.size();
    vector<int> res(n, 1);
    int temp = 1;
    for(int i = 0; i < n; i++)
    {
        res[i] = temp;
        temp *= nums[i];
    }
    temp = 1;
    for(int i = n - 1; i >= 0; i--)
    {
        res[i] *= temp;
        temp *= nums[i];
    }
    return res;
}

时间复杂度为 O ( n ) O(n) O(n)

292. Nim Game

Description

在这里插入图片描述

Analysis & Solution

观察题目,每次拿走1-3颗石头。如果石头是4个,先手无论拿几颗,后手都可以获胜。类似地,只要石头是4的倍数,则后手必赢。那么石头不是4的倍数时,先手就会获胜,直接判断输入是否是4的倍数即可。

Code

bool canWinNim(int n) {
    return n % 4 != 0;
}

时间复杂度为 O ( 1 ) O(1) O(1)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值