制定网站建设方案,石景山周边网站建设,html5小游戏源码,长沙关键词快速排名摘要
剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
一、双指针解析
考虑定义双指针 i , j分列数组左右两端#xff0c;循环执行#xff1a;
指针 i从左向右寻找偶数#xff1b;指针 j从右向左寻找奇数#xff1b;将偶数nums[i]和奇数 nums[j]交换。
可始终保证…摘要
剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
一、双指针解析
考虑定义双指针 i , j分列数组左右两端循环执行
指针 i从左向右寻找偶数指针 j从右向左寻找奇数将偶数nums[i]和奇数 nums[j]交换。
可始终保证指针 i左边都是奇数指针j右边都是偶数 。 算法流程
初始化i, j双指针分别指向数组 nums左右两端循环交换 当 ij时跳出 指针i遇到奇数则执行 ii1跳过直到找到偶数 指针j遇到偶数则执行 jj−1跳过直到找到奇数 交换 nums[i]和 nums[j]值返回值返回已修改的 nums数组
class Solution {public int[] exchange(int[] nums) {int left 0, right nums.length - 1;while (left right) {while (left right nums[left] % 2 1) {left;}while (left right nums[right] % 2 0) {right--;}if (left right) {int temp nums[left];nums[left] nums[right];nums[right] temp;left;right--;}}return nums;}
}
复杂度分析
时间复杂度 O(N) N为数组 nums长度双指针 i, j共同遍历整个数组。空间复杂度 O(1) 双指针i, j使用常数大小的额外空间。
博文参考
《leetcode》