算法_数组_移除元素(双指针)

文章目录

  • 移除元素
    • 1.数组移除指定元素
    • 2.两种解法
      • 第一种 — 开两层for循环进行删除
      • 第二种 — 双指针法
    • 3.总结
      • python
      • 算法
    • 4.相关题目推荐

移除元素

leetcode题目链接

1.数组移除指定元素

数组的存储空间是连续的,不能单独删除元素,只能用其他元素覆盖需要删除的元素

2.两种解法

第一种 — 开两层for循环进行删除

时间复杂度为O(n^2)
空间复杂度为O(1)

思路:只要发现了该元素,就将该元素后面的元素整体向前移动,一直遍历到数组结束

第二种 — 双指针法

时间复杂度为O(n)
空间复杂度为O(1)

思路:使用一个快指针和一个慢指针。
慢指针用来记录构造出来的新数组的结束位置,快指针通过判断给定的元素是否和该指针位置的元素相同。

如果不相同则需要将该快指针位置的元素覆盖慢指针位置的元素,然后快慢指针都向后移动一位;
如果相同,则只需要接着向后移动快指针再进行判断即可

代码如下:

def removeElement(nums,val):
	slowindex = 0 # 初始化慢指针
	for fastindex in range(len(nums)): # 遍历快指针
		if nums[fastindex] != val: # 如果不相同
			nums[slowindex] = nums[fastindex] # 快指针位置的元素覆盖慢指针位置的元素
			slowindex += 1 # 慢指针向后移动一位
	return slowindex # slowindex的值就是新数组的长度

3.总结

python

  1. range返回的是一个迭代对象,不是list

    用法:

     range(len(list))
     range(1,10,2)
     range(10,-1,-1)
    
  2. list.sort(key=None, reverse=False)

    key:用来比较的元素
    reverse:False:升序,True:降序

     # 获取列表的第二个元素
     def takeSecond(elem):
         return elem[1]
      
     # 列表
     random = [(2, 2), (3, 4), (4, 1), (1, 3)]
      
     # 指定第二个元素排序
     random.sort(key=takeSecond)
    

算法

  1. 双指针法

    定义快慢指针,分别记录有关信息,可减少循环次数,提升算法的时间复杂度

4.相关题目推荐

26.删除排序数组中的重复项
283.移动零
844.比较含退格的字符串
977.有序数组的平方

你可能感兴趣的:(算法,算法,leetcode,职场和发展)