剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
1、题目📑
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。
实例1:
输入:nums = [1,2,3,4]
输出:[1,3,2,4]
注:[3,1,2,4] 也是正确的答案之一。
限制:
0 <= nums.length <= 500000 <= nums[i] <= 10000
2、思路🧠
方法一:双指针
- 从尾部和头部定义指针,进行交换
- 头指针一定要小于尾指针不然就直接结束循环
- 头指针的为偶数,尾指针为奇数才进行交换
- 否则一直往后移动,直到出现条件3满足。
废话少说~~~~~上代码!
3、代码👨💻
第一次commit AC
class Solution {
public int[] exchange(int[] nums) {
int pre = 0;
int tail = nums.length - 1;
while (pre < tail) {
if(nums[pre] % 2 == 0) {
if(nums[tail] % 2 != 0){
swap(nums, pre , tail);
pre++;
tail--;
}else {
tail--;
}
}else {
pre++;
}
}
return nums;
}
public static void swap (int arr[], int i, int j){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
时间复杂度:O(N) N为数组 nums 的长度,双指针 i , j 共同遍历整个数组
空间复杂度:O(1) 双指针 i , j 使用常数大小的额外空间。
4、总结
该题目是将数组的位置进行交换,要始终保证,指针 i 左边都是奇数,指针 j 右边都是偶数 。
❤️来自专栏《LeetCode基础算法题》欢迎订阅❤️
厂长写博客目的初衷很简单,希望大家在学习的过程中少走弯路,多学一些东西,对自己有帮助的留下你的赞赞👍或者关注➕都是对我最大的支持,你的关注和点赞给厂长每天更文的动力。
对文章其中一部分不理解,都可以评论区回复我,我们来一起讨论,共同学习,一起进步!