赚小钱 发表于 2020-6-7 20:14:20

Stubborn 发表于 2020-6-7 19:56
瞅瞅18楼的,时间,空间复杂度是多少

你调用了Array.insert, 我好奇,会调用多少次。

Stubborn 发表于 2020-6-7 20:20:17

赚小钱 发表于 2020-6-7 20:14
你调用了Array.insert, 我好奇,会调用多少次。

不超过2N,insert是成功的操作,不会反复的操作

赚小钱 发表于 2020-6-7 20:21:37

Stubborn 发表于 2020-6-7 20:20
不超过2N,insert是成功的操作,不会反复的操作

无所谓超不超过 2N,既然正比于 N,那就是 O(N)

Stubborn 发表于 2020-6-7 20:29:53

赚小钱 发表于 2020-6-7 20:21
无所谓超不超过 2N,既然正比于 N,那就是 O(N)

这个确实哈~不过第二个wihle会重复扫描数组,假如数组是 * n   会导致O(N^2), 二个wihle根据处理完的长度,长度又要根据任务长度来。最坏的情况应该就这样了,空间的话,O(1)应该是没问题的吧

赚小钱 发表于 2020-6-7 20:32:43

Stubborn 发表于 2020-6-7 20:29
这个确实哈~不过第二个wihle会重复扫描数组,假如数组是 * n   会导致O(N^2), 二个wihle根据处理完 ...

有点复杂,大脑拒绝思考{:9_219:}

总之,我是不太相信有 O(1) 的做法的。

Stubborn 发表于 2020-6-7 20:34:48

赚小钱 发表于 2020-6-7 20:32
有点复杂,大脑拒绝思考

总之,我是不太相信有 O(1) 的做法的。

{:10_255:},不是O(1)是多少嘛{:10_272:}

Stubborn 发表于 2020-6-7 20:36:03

在东边 发表于 2020-6-7 15:50
我是要按照元素出现次数排序,不是要按照元素大小排序

要想知道每个元素出现多少次,那至少得遍历一遍 ...

在原来容器上操作是没问题的,不需要新的容器

赚小钱 发表于 2020-6-7 20:42:38

Stubborn 发表于 2020-6-7 20:34
,不是O(1)是多少嘛

如果,解决 1 个元素的数组,使用的**最少**额外空间,同样可以解决 1000000000000000000000 个元素的数组, 也就是说,额外空间的大小,与原数据规模,无任何相关性,才叫 O(1) 的空间复杂度。

Stubborn 发表于 2020-6-7 20:53:37

赚小钱 发表于 2020-6-7 20:42
如果,解决 1 个元素的数组,使用的**最少**额外空间,同样可以解决 1000000000000000000000 个元素的数 ...

在原来数组操作,没有其他新的容器,算嘛{:10_319:}

nahongyan1997 发表于 2020-6-7 20:59:05

Twilight6 发表于 2020-6-7 14:58
这样的空间复杂度算 O(1) 吧

这个0(1)是几年级教的

nahongyan1997 发表于 2020-6-7 20:59:46

Python_Aaron 发表于 2020-6-7 18:21
新手看不懂,什么是空间复杂度?

同问

Twilight6 发表于 2020-6-7 21:00:32

nahongyan1997 发表于 2020-6-7 20:59
这个0(1)是几年级教的

什么鬼几年级??? 这个是数据结构与算法的

Stubborn 发表于 2020-6-7 21:01:10

赚小钱 发表于 2020-6-7 20:42
如果,解决 1 个元素的数组,使用的**最少**额外空间,同样可以解决 1000000000000000000000 个元素的数 ...

额外空间的大小,与原数据规模,无任何相关性。也就是说,不使用用额外的容器,对原数据做存储,映射的操作嘛.

赚小钱 发表于 2020-6-7 21:15:20

Stubborn 发表于 2020-6-7 21:01
额外空间的大小,与原数据规模,无任何相关性。也就是说,不使用用额外的容器,对原数据做存储,映射的操 ...

可以使用,但是,长度为一个常数。
比如,在算法中,需要额外的5个位置来保存状态,申请一个固定长度的数据,这个长度,在编译期就可以确定。
这叫 O(1) 空间复杂度。

Stubborn 发表于 2020-6-7 21:38:03

赚小钱 发表于 2020-6-7 21:15
可以使用,但是,长度为一个常数。
比如,在算法中,需要额外的5个位置来保存状态,申请一个固定长度的 ...

理解了,数据规模大小,不影响新的容器长度,大小。也算O(1)。{:10_287:}大佬,加个V呀

赚小钱 发表于 2020-6-7 21:41:27

Stubborn 发表于 2020-6-7 21:38
理解了,数据规模大小,不影响新的容器长度,大小。也算O(1)。大佬,加个V呀

V 是啥

Stubborn 发表于 2020-6-7 21:43:30

赚小钱 发表于 2020-6-7 21:41
V 是啥

微信呀,Vx简称V

在东边 发表于 2020-6-7 21:45:08

@Stubborn @赚小钱

两位大佬,这个空间复杂度应该是 O(1) 吧{:10_254:}

def sort_by_frequency(nums):
    min_count = min(map(nums.count, nums))
    sorted_length = 0
    cur_count = min_count

    while sorted_length < len(nums):
      for idx, num in enumerate(nums):
            if idx >= sorted_length and nums.count(num) == cur_count:
                # nums, nums = num, nums# 可以实现但不稳定
                nums.insert(sorted_length, nums.pop(idx))
                sorted_length += 1
      cur_count += 1

赚小钱 发表于 2020-6-7 21:55:13

在东边 发表于 2020-6-7 21:45
@Stubborn @赚小钱

两位大佬,这个空间复杂度应该是 O(1) 吧

看起来是的,牛逼。

笑叹, 发表于 2020-6-8 22:16:36

{:10_256:}
页: 1 [2] 3 4
查看完整版本: 对列表按照元素出现次数升序排序,要求空间复杂度为O(1)