zoukankan      html  css  js  c++  java
  • 双指针应用

    #同向:不改变元素的相对位置

    #反向:改变元素的相对位置

    例一:翻转数组,不额外开辟空间O(1)

    [1,2,3,4,5,6,7,8] → [8,7,6,5,4,3,2,1]

     #反向

    1 def reverseArray(s):
    2     i, j = 0, len(s) - 1
    3     while i < j:
    4         s[i], s[j] = s[j], s[i]
    5         i += 1
    6         j -= 1
    7     return s

    例二:将数组所有的元素0移动到数组一端

    [0,1,2,0,3,0,0,5,0] → [1, 2, 3, 5, 0, 0, 0, 0, 0]
    #同向
     1 def moveEnd(s):
     2     i, j = 0 ,1
     3     while i < j and j <= len(s)-1:
     4         if s[i] == 0 and s[j] != 0:
     5             s[i], s[j] = s[j], s[i]
     6         while s[i] != 0:
     7             i += 1
     8             j += 1
     9         while j <= len(s)-1 and (s[i] == 0 and s[j] == 0):
    10             j += 1
    11     return s

    #反向

     1 def moveEnd(s):
     2     i, j = 0 ,len(s) - 1
     3     while i < j:
     4         if s[i] == 0 and s[j] != 0:
     5             s[i], s[j] = s[j], s[i]
     6         while (i < j) and (s[i] != 0):
     7             i += 1
     8         while (i < j) and (s[j] == 0):
     9             j -= 1       
    10     return s

    例三:将数组的奇数与偶数分开

    [2,7,6,1,3,4,5,2,8] → [5, 7, 3, 1, 6, 4, 2, 2, 8]
    #同向
     1 def exchange(nums):
     2 
     3     i, j = 0, 1
     4     while i < j and j <= len(nums) - 1:
     5         if nums[i] & 1 == 0 and nums[j] & 1 == 1:
     6             nums[i], nums[j] = nums[j], nums[i]
     7         while nums[i] & 1 == 1:
     8             i += 1
     9             j += 1
    10         while (j <= len(nums) - 1) and nums[j] & 1 == 0:
    11             j += 1
    12 
    13     return nums

    #反向
     1 def exchange(nums):
     2 
     3     i, j = 0, len(nums) - 1
     4     while i < j:
     5         if nums[i] & 1 == 0 and nums[j] & 1 == 1:
     6             nums[i], nums[j] = nums[j], nums[i]
     7         while nums[i] & 1 == 1:
     8             i += 1
     9             j -= 1
    10         while (j <= len(nums) - 1) and nums[j] & 1 == 0:
    11             j -= 1
    12 
    13     return nums
    
    
    
     
  • 相关阅读:
    linux学习第一周笔记
    三授权六禁令(必背)
    内存复用三种技术
    移动平台路径相关
    unitUnity优化技巧
    游戏开发优化建议
    转载, unity 如何自定义脚本
    unity animation 在播放动画时报错 The animation state Eat could not be played because it couldn't be found!
    unity 学习之前需要做的准备
    xml 操作遇到的坑
  • 原文地址:https://www.cnblogs.com/xiaodangdang/p/13551961.html
Copyright © 2011-2022 走看看