LeetCode day2

本文介绍了LeetCode的一道算法题,题目要求根据给定的排列构建一个新的数组,内容包括Java和Python的解法,并分享了一个简洁的代码实现。博主还提到通过增加System.gc()来优化内存占用,并计划进一步学习哈希算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LeetCode算法练习day2

(每日一图)
在这里插入图片描述
话不多说,直接上题:

基于排列构建数组

给你一个 从 0 开始的排列 nums(下标也从 0 开始)。请你构建一个 同样长度 的数组 ans ,
其中,对于每个 i(0 <= i < nums.length),都满足 ans[i] = nums[nums[i]] 。返回构建好的数组 ans 。从 0 开始的排列 nums 是一个由 0 到nums.length - 1(0 和 nums.length - 1 也包含在内)的不同整数组成的数组。

示例:

输入:nums = [0,2,1,5,3,4]
输出:[0,1,2,4,5,3]
解释:数组 ans 构建如下:
ans = [nums[nums[0]], nums[nums[1]], nums[nums[2]], nums[nums[3]], nums[nums[4]], nums[nums[5]]]
= [nums[0], nums[2], nums[1], nums[5], nums[3], nums[4]]
= [0,1,2,4,5,3]

思路分析

单看题目描述,这题他丫的说的啥。
然后呢,看了示例,再返回去看题,这不就是把组内元素当下标重新赋值给一个数组吗?不愧是全站通过率最高的一道题。

Java 解法

 public class day2 {
    public int[] buildArray(int[] nums) {
          int[] ans =new int[nums.length];
          for(int i=0;i<nums.length;i++){
            ans[i]=nums[nums[i]];
          }
          return ans;
    }
  }

在这里插入图片描述
当然结果是不出意料的通过了…
啊哈,总感觉有点被骗了的感觉,所以我找到内存第一的那哥们,看看我差在哪了。
在这里插入图片描述
多了一行代码:System.gc();也就是一个垃圾收集器,减小了内存的占用。
然后我也试了一下:
在这里插入图片描述
嗯,非常nice,这个数据一看就很有成就感。
鉴于这道题有些过于简单,所以我再增加一个Python解法(为了这篇博客不是那么空洞)

Python3 解法

由于我本身对于Python学习的并不是很熟练(局限于某一个库的使用)所以代码可能比较冗杂。

class Solution:
    def buildArray(self, nums: List[int]) -> List[int]:
        ans = []
        for i in range(len(nums)):
            ans.append(nums[nums[i]])
        return ans

在这里插入图片描述
没什么难度,所以今天就先结束了
最后附上一个我觉得很简洁的代码

def buildArray(self, nums: List[int]) -> List[int]:
    return [nums[nums[i]] for i in range(len(nums))]

一句就完成了,但是有那么一点慢:
在这里插入图片描述
问题不大,明天整理一下哈希算法相关知识,以后周一到周五日常练题,周六周日总结。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值