JavaScript / TypeScript for LeetCode (136)

是差点运气,可我一直在努力!

当前进程:

  • 开始时间:2020.6.27
  • 结束时间:undefined

GitHub仓库:https://github.com/Cundefined/JavaScript-or-TypeScript-for-LeetCode

1、题目要求

( 剑指 Offer 21 ) 调整数组顺序使奇数位于偶数前面

2、解题思路

方法一、首尾双指针

解题思路:双指针
方法一、首尾双指针

方法二、快慢双指针

解题思路:双指针
方法二、快慢双指针
优点:可使得一侧元素有序
快慢双指针:两个指针如果都从数组开头向后移动的话,可以使得【奇数有序】
          两个指针如果都从数组末尾向前移动的话,可以使得【偶数有序】

2.1、JavaScript Solution

方法一、首尾双指针

/**
 * @param {number[]} nums
 * @return {number[]}
 */
var exchange = function (nums) {
  let left = 0;
  let right = nums.length - 1;

  while (left < right) {
    //左侧遇到偶数,固定左侧指针不动,去右侧找奇数,找到就交换
    while ((nums[left] & 1) === 0 && left < right) {
      // 去右侧找到奇数,找到了就交换,交换了就退出循环,移动左侧指针
      if ((nums[right] & 1) !== 0) {
        let temp = nums[left];
        nums[left] = nums[right];
        nums[right] = temp;
        break;
      } else {
        //没找到的话,right指针一直往左移动
        right--;
      }
    }
    left++;
  }

  return nums;
};

2.2、TypeScript Solution

方法二、快慢双指针

function exchange(nums: number[]): number[] {
  //快指针主要负责遍历数组,且遇到偶数先停下判断
  let fast: number = 0;
  let slow: number = 0;

  for (fast; fast < nums.length; fast++) {
    //遇到奇数先停下判断,把奇数往前挪
    if ((nums[fast] & 1) !== 0) {
      //避免数组第一个元素为奇数时,让fast停下来比较,此时两个指针在一起,就不用比较了
      //后面只要fast开始移到,就一定一直在slow前面
      if (fast !== slow) {
        let temp = nums[fast];
        nums[fast] = nums[slow];
        nums[slow] = temp;
      }
      //fast碰到偶数,就移动slow指针
      slow++;
    }
  }

  return nums;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值