奇偶双指针:求解《905. 按奇偶排序数组》

2022-04-28 20:06:34
奇偶双指针,求解《905. 按奇偶排序数组》

双指针

奇偶性

例题

905. 按奇偶排序数组

给你一个整数数组 nums,将 nums 中的的所有偶数元素移动到数组的前面,后跟所有奇数元素。 返回满足此条件的 任一数组 作为答案。

答案

var sortArrayByParity = function(nums) {
  let i = -1, j = nums.length
  while (++i < --j) {
    while (i < j && (nums[i] & 1) === 0) i++
    while (i < j && (nums[j] & 1) === 1) j--
    ;[nums[i], nums[j]] = [nums[j], nums[i]]
  }
  return nums
};
func sortArrayByParity(nums []int) []int {
  l, r := 0, len(nums) - 1
  for l < r {
    for l < r && (nums[l] & 1) == 0 {
      l++
    }
    for l < r && (nums[r] & 1) == 1 {
      r--
    }
    nums[l], nums[r] = nums[r], nums[l]
    l++
    r--
  }
  return nums
}
class Solution {
    function sortArrayByParity($nums) {
      $l = -1;
      $r = count($nums);
      while (++$l < --$r) {
        while ($l < $r && ($nums[$l] & 1) === 0) $l++;
        while ($l < $r && ($nums[$r] & 1) === 1) $r--;
        list($nums[$l], $nums[$r]) = array($nums[$r], $nums[$l]);
      }
      return $nums;
    }
}
5 种方法交换变量,用绝对值和求模标记,用位图、掩码、哈希集合、哈希映射、正则、排序和暴力法:求解《442. 数组中重复的数据》
利用 5 种方法交换变量,用绝对值和求模标记,用位图、掩码、哈希集合、哈希映射、正则、排序和暴力法求解《442. 数组中重复的数据》
二分查找(对数运算 + 前缀和),滑动窗口:求解《713. 乘积小于 K 的子数组》
根据对数运算性质将相乘转为求和问题,用前缀和优化。二分查找,滑动窗口,求解《713. 乘积小于 K 的子数组》
递归和双指针迭代:求解《21. 合并两个有序链表》和《剑指 Offer 25. 合并两个排序的链表》
递归和双指针迭代,求解《21. 合并两个有序链表》和《剑指 Offer 25. 合并两个排序的链表》