https://leetcode.com/problems/array-nesting/
你会得到一个长度是n,范围是[0 ~ n-1]的 nums
并且要组合一个集合 s[k] = {nums[k], nums[nums[k]], nums[nums[nums[k]]], ... }
详细规则我们以Example 1 解释
一开始的集合是 s[0] ,我们第一个元素就是 nums[0] = 5 ,第二个元素则是 nums[5] = 6 ,以此类推直到 nums[i] 等於 0。
这题的难度是Medium,不过其实蛮简单的,很快就能想到硬干的方法
只要照字面意思run过每个集合,并回传最大的长度就好
但是,这种解法遇到长度很长的测试案例就会超过时间了,送出去会显示 Time Limit Exceeded。
class Solution:
def arrayNesting(self, nums: List[int]) -> int:
res = 0
for i in range(len(nums)):
count = 1
j = nums[i]
while nums[j] != nums[i]:
j = nums[j]
count += 1
res = max(count, res) #纪录最大的长度
return res
上一个解法是因为我们会重复计算好几个过程
像是 example1 中的 s[0] = {nums[0], nums[5], nums[6], nums[2]} = {5, 6, 2, 0}
我们可以知道 k = 0 时集合为长度4的 {5,6,2,0}
那我们就可以知道 k 为 5, 6, 2, 0时,就都是长度为4的集合,就像下图绕圈圈的这种感觉
class Solution:
def arrayNesting(self, nums: List[int]) -> int:
res = 0
visted = set()
for i in range(len(nums)):
if nums[i] in visted:
continue
count = 1
j = nums[i]
while nums[j] != nums[i]:
visted.add(j) #记录可以省略的数字
j = nums[j]
count += 1
res = max(count, res)
return res
今天是第一天,刚好遇到简单好讲解的题目
LeetCode题目虽然都有区分难度 easy medium hard
但是我觉得有时候 medium 的题目比一些 easy 题目简单,有时候 easy 题目要多想一下
个人认为比较准确区分题目难易度的分法是看题目左上角的正赞倒赞比例
感觉倒赞比较多的题目就有点麻烦,像是今天这题的正赞比就超过9成
目的 将行为拆成请求与执行两个区块,请求的部分独自封装成物件,执行的部分则交由专门负责执行的物件。 ...
上一篇我们已经能够从我们资料库上抓出我们建立的菜单了, 这篇会跟大家一起把我们抓出来的画面显示在网页...
人的科技文明发展始终来自於人性 藉由现在的科技技术之发展,我们可以非常成熟的运用机器学习、深度学习及...
前言:介绍完了二元树的建立和走访方式,紧接着要来介绍其他基本应用,一样用上一篇的程序码进行修改 可以...
Keyword: 单一职责 最小知道 单一职责与最小知道 在MVVM中,单一职责与最小知道原则是非常...