📝 面试求职: 「面试试题小程序」 ,内容涵盖 测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试,命中率杠杠的。(大家刷起来…)
📝 职场经验干货:
双指针法是一种高效的解决方案,适合原地操作数组。我们使用两个指针:一个慢指针 slow
用于指向去重后的数组的最后一个位置,另一个快指针 fast
遍历整个数组。
def remove_duplicates(nums):
"""
原地删除已排序数组中的重复元素,返回去重后数组的长度。
:param nums: List[int] - 已排序的数组
:return: int - 去重后数组的长度
"""
if not nums: # 如果数组为空,直接返回0
return 0
# 慢指针初始化为0,表示去重后数组的最后一个有效位置
slow = 0
# 快指针从1开始遍历数组
for fast in range(1, len(nums)):
if nums[fast] != nums[slow]: # 如果快指针指向的值与慢指针不同
slow += 1 # 慢指针向前移动一位
nums[slow] = nums[fast] # 更新慢指针位置的值为快指针的值
# 返回去重后数组的长度(慢指针+1)
return slow + 1
# 测试代码
nums = [1, 1, 2, 2, 3, 4, 4, 5]
length = remove_duplicates(nums)
print("去重后的数组长度:", length)
print("去重后的数组内容:", nums[:length])
详细解释:
-
输入数组:
nums
是一个已排序的数组。 -
慢指针
slow
:表示去重后的数组的最后一个有效位置。 -
快指针
fast
:用于遍历数组,寻找与nums[slow]
不同的元素。 -
去重逻辑:
-
如果
nums[fast] != nums[slow]
,说明发现了一个新元素。 -
将
slow
向前移动一位,并将nums[fast]
的值复制到nums[slow]
。
-
-
返回结果:最终返回
slow + 1
,即去重后数组的长度。
时间复杂度:
-
O(n):快指针遍历整个数组一次,时间复杂度为线性。
空间复杂度:
-
O(1):只使用了两个指针(
slow
和fast
),没有使用额外的空间。
最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】