不使用set函数统计升序Python列表中不同元素的数量
解题思路
核心逻辑
利用输入序列全部升序排列的特性,重复元素必然连续相邻,不需要嵌套循环、不需要额外存储所有出现过的元素,单次遍历即可完成统计:
- 空序列直接返回0
- 非空序列默认至少有1种不同元素,初始计数为1
- 从第二个元素开始遍历,每次和上一个被统计的不同元素对比,数值不等则计数+1,同时更新参考值为当前元素
- 最终计数结果就是不同元素的总数量
原有思路问题说明
- 当前你写的代码仅统计了值为2的元素出现次数,和统计不同元素总数的需求不符
- 嵌套循环计算笛卡尔积的思路完全没有必要,升序数组的特性已经帮你把重复元素归类到相邻位置,单次遍历的时间复杂度仅为O(n),效率远高于嵌套循环
可运行实现代码
my_list = [1, 1, 2, 2, 2, 3, 5, 6] if not my_list: count = 0 else: count = 1 prev_val = my_list[0] for num in my_list[1:]: if num != prev_val: count += 1 prev_val = num print(count)
输入输出验证
示例输入:
1 1 2 3 3
运行后输出:3,完全符合题目要求
内容的提问来源于stack exchange,提问作者Emilia Delizia
相关产品推荐
相关产品推荐

