算法通关村第三关-白银挑战双指针思想
大家好我是苏麟 , 今天带来算法第三关 .
本期大纲
- 元素奇偶移动专题
元素奇偶移动专题
描述 :
给你一个整数数组 nums,将 nums 中的的所有偶数元素移动到数组的前面,后跟所有奇数元素。
返回满足此条件的 任一数组 作为答案。
题目 :
LeetCode 905. 按奇偶排序数组 :
按奇偶排序数组
分析 :
我们可以采用对撞型双指针的方法,图示中的对撞型基本一致,只不过比较的对象是奇数还是偶数。如下图所示:
维护两个指针 left=0和 right=arr.ength-1,left从0开始逐个检查每个位置是否为偶数,如果是则跳过如果是奇数则停下来。然后right从右向左检查,如果是奇数则跳过偶数则停下来。然后交换array[left]和array[right]。之后再继续巡循环,直到left> =right。
解析 :
class Solution {
public int[] sortArrayByParity(int[] nums) {
int left = 0;
int right = nums.length - 1;
while(left < right){
if((nums[left] % 2) > (nums[right] % 2)){
int temp = nums[left];
nums[left] = nums[right];
nums[right] = temp;
}
if(nums[left] % 2 == 0){
left++;
}
if(nums[right] % 2 > 0){
right--;
}
}
return nums;
}
}
这期就到这里 , 下期见 !