方法一:首尾双指针一
class Solution {
public int [ ] exchange ( int [ ] nums) {
int end = nums. length - 1 ;
for ( int i = 0 ; i < nums. length; i++ ) {
if ( nums[ i] % 2 == 0 ) {
int j = end;
for ( j = end; j > i; j-- ) {
if ( nums[ j] % 2 != 0 ) {
int temp = nums[ i] ;
nums[ i] = nums[ j] ;
nums[ j] = temp;
break ;
}
}
if ( j == i)
return nums;
else
end = j;
}
}
return nums;
}
}
方法二:首尾双指针二
class Solution {
public int [ ] exchange ( int [ ] nums) {
int left = 0 ;
int right = nums. length - 1 ;
while ( left < right) {
if ( nums[ left] % 2 != 0 ) {
left++ ;
continue ;
}
if ( nums[ right] % 2 == 0 ) {
right-- ;
continue ;
}
int temp = nums[ left] ;
nums[ left] = nums[ right] ;
nums[ right] = temp;
}
return nums;
}
}
方法三:快慢双指针
class Solution {
public int [ ] exchange ( int [ ] nums) {
int low = 0 , fast = 0 ;
while ( fast < nums. length) {
if ( nums[ fast] % 2 != 0 ) {
int temp = nums[ fast] ;
nums[ fast] = nums[ low] ;
nums[ low] = temp;
low++ ;
}
fast++ ;
}
return nums;
}
}