2026年计算机岗面试编程实操试题及答案.docxVIP

  • 0
  • 0
  • 约4.22千字
  • 约 11页
  • 2026-10-31 发布于四川
  • 举报

2026年计算机岗面试编程实操试题及答案.docx

2026年计算机岗面试编程实操试题及答案

给你一个有序数组nums,请你原地删除重复出现的元素,使得每个元素最多出现两次,返回删除后数组的新长度。要求不要使用额外数组空间,必须原地修改输入数组,空间复杂度为O(1)。示例:输入nums=[1,1,1,2,2,3],输出长度5,修改后数组的前5位为[1,1,2,2,3];输入nums=[0,0,1,1,1,1,2,3,3],输出长度7,修改后数组的前7位为[0,0,1,1,2,3,3]。

解答:由于输入数组是有序的,所有重复元素一定连续出现,我们可以采用快慢指针法解决该问题,符合O(1)空间复杂度要求。快指针遍历整个数组扫描所有元素,慢指针标记已经处理完成、符合每个元素最多出现两次要求的数组末尾位置。我们只需要判断当前快指针指向的元素,和慢指针前两个位置的元素是否相等:如果相等,说明该元素已经出现过两次,当前元素重复需要跳过;如果不相等,说明当前元素符合要求,将其放到慢指针位置,慢指针后移一位。边界处理:当数组长度小于等于2时,所有元素都符合要求,直接返回原数组长度即可,初始时慢指针从位置2开始遍历。

代码实现(Python):

defremoveDuplicates(nums):

n=len(nums)

ifn=2:

returnn

slow=2

forfastinrange(2,n):

ifnu

文档评论(0)

1亿VIP精品文档

相关文档