奇偶互换

约 198 字小于 1 分钟

奇偶互换

58面试时候面的算法题,就是一个数组,奇数放前面,偶数放后面。

代码

// 面试题,将奇数放到前面 偶数放到后面
// 时间复杂度为O(n) 空间复杂度为 i , length
func swap(p []int) []int {
  lowIndex := 0
  highIndex := len(p) - 1

  for true {
    // 如果当前是奇数一直走,走到一个偶数暂停
    for p[lowIndex]%2 != 0 {
      if lowIndex >= highIndex {
        break
      } else {
        lowIndex++
      }
    }
    // 如果当前是偶数一直走,走到一个偶数暂停
    for p[highIndex]%2 == 0 {
      if lowIndex >= highIndex {
        break
      } else {
        highIndex--
      }
    }
    // 如果两个值相遇不在走了
    if lowIndex >= highIndex {
      break
    }
        // 找到了奇数和偶数,交换
    p[lowIndex], p[highIndex] = p[highIndex], p[lowIndex]

  }
  return p
}

优化

数据交换时候可以不借用三方变量吗?请查看Xor