考试结束,班级平均分只拿到了年级第二,班主任于是问道:大家都知道世界第一高峰珠穆朗玛峰,有人知道世界第二高峰是什么吗?正当班主任要继续发话,只听到角落默默想起来一个声音:”乔戈里峰”
前言
昨天贴的代码和题有错误,今天重发一下,抱歉哈~
2018.11.12号打卡明天的题目:
题目
每天一道leetcode905-按奇偶排序数组
题目详述
给定一个非负整数数组 A,返回一个由 A 的所有偶数元素组成的数组,后面跟 A 的所有奇数元素。
题目详解
使用额外空间的思路
就是使用一个新的数组B,去存,每次判断原来的数组是不是偶数,是偶数就存到前面,是奇数就存到后面
代码
1class Solution {
2 public int[] sortArrayByParity(int[] A) {
3 if(A.length == 0)
4 return A;
5 int [] B = new int [A.length];
6 int begin = 0;
7 int end = B.length - 1;
8 for(int i=0;i<A.length;i++)
9 {
10 if(A[i] % 2 == 0)
11 {
12 B[begin] = A[i];
13 begin++;
14 }
15 else{
16 B[end] = A[i];
17 end--;
18 }
19 }
20 return B;
21 }
22}
代码讲解
10-14行,是判断偶数,如果是偶数,那么就存到B的前面,同时注意begin++
15-18行,是判断是奇数了,如果是奇数,那么就存到后面,同时end--;
不使用额外空间的思路
直接在原数组进行操作,一个i从0数组开头开始,j从数组末尾开始;
依次去判断,如果A[i]是偶数,直接i++,如果A[j]是奇数直接j--;(为啥呢,因为前面的数已经是偶数了,满足条件,就往后判断呗~后面的是奇数也是同理)
如果A[i]是奇数的同时A[j]是偶数,那么就交换这两个数
由于这个是两端到中间遍历,速度肯定比上一个从头到尾快
代码
1class Solution {
2 public int[] sortArrayByParity(int[] A) {
3 int i=0, j= A.length - 1;
4 while(i < j)
5 {
6 if(A[i] % 2 == 1 && A[j] %2 == 0)
7 {
8 int temp = A[i];
9 A[i] = A[j];
10 A[j] = temp;
11 i++;
12 j--;
13 }
14 else if(A[i] % 2 == 0)
15 {
16 i++;
17 }
18 else if(A[j] % 2 == 1)
19 {
20 j--;
21 }
22 }
23 return A;
24 }
25}
代码讲解
6-13行 就是A[i]是奇数,A[j]是偶数,然后交换两者;
14-17行 就是A[i]是偶数,往数组末端移动
18-21行 就是A[j]是奇数,往数组开头移动
结束语
2018.11.12号打卡
作者乔戈里亲历2019秋招,哈工大计算机本硕,百度准入职java工程师,欢迎大家关注我的微信公众号:程序员乔戈里,公众号有3T编程资源,以及我和我朋友(准入职百度C++工程师)在秋招期间整理的近200M的面试必考的java与C++面经,并有每天一道leetcode打卡群与技术交流群,欢迎关注。
218

被折叠的 条评论
为什么被折叠?



