Given an array with positive and negative integers. Re-range it to interleaving with positive and negative integers.
Notice
You are not necessary to keep the original order of positive integers or negative integers.
Example
简化后的代码
python
Given [-1, -2, -3, 4, 5, 6]
, after re-range, it will be [-1, 5, -2, 4, -3, 6]
or any other reasonable answer.
一个写的并不简洁的代码
java
public class Solution {
/*
* @param A: An integer array.
* @return: nothing
*/
public void rerange(int[] nums) {
// write your code here
if (nums == null || nums.length < 3) {
return;
}
Arrays.sort(nums);
int size = nums.length;
boolean flag = true;
int left = 0;
int right = 0;
if (size % 2 == 0) {
left = 0;
right = size - 1;
while (left <= right) {
if (flag && left <= right) {
left++;
right--;
flag = !flag;
} else if (!flag && left <= right){
reverse(nums, left, right);
left++;
right--;
flag = !flag;
}
}
}
else if (size % 2 == 1 && nums[nums.length / 2] < 0) {
left = 1;
right = size - 1;
while (left <= right) {
if (flag && left <= right) {
reverse(nums, left, right);
left++;
right--;
flag = !flag;
} else if (!flag && left <= right) {
left++;
right--;
flag = !flag;
}
}
}
else if (size % 2 == 1 && nums[nums.length / 2] > 0) {
left = 0;
right = size - 2;
while (left <= right) {
if (flag && left <= right) {
reverse(nums, left, right);
left++;
right--;
flag = !flag;
} else if (!flag && left <= right) {
left++;
right--;
flag = !flag;
}
}
}
}
private void reverse(int[] nums, int start, int end) {
int temp = nums[start];
nums[start] = nums[end];
nums[end] = temp;
}
}
简化后的代码
java
public class Solution {
/*
* @param A: An integer array.
* @return: nothing
*/
public void rerange(int[] nums) {
// write your code here
if (nums == null || nums.length < 3) {
return;
}
int left = 0;
int right = 0;
boolean flag = true;
Arrays.sort(nums);
if (nums.length % 2 == 0) {
left = 0;
right = nums.length - 1;
flag = true;
} else if (nums.length % 2 == 1 && nums[nums.length / 2] < 0) {
left = 1;
right = nums.length - 1;
flag = false;
} else if (nums.length % 2 == 1 && nums[nums.length / 2] > 0) {
left = 0;
right = nums.length - 2;
flag = false;
} else {
return;
}
while (left <= right) {
if (left <= right && flag) {
left++;
right--;
flag = !flag;
} else if (left <= right && !flag) {
reverse(nums, left, right);
left++;
right--;
flag = !flag;
}
}
}
private void reverse(int[] nums, int left, int right) {
int temp = nums[left];
nums[left] = nums[right];
nums[right] = temp;
}
}
python
class Solution:
"""
@param: A: An integer array.
@return: nothing
"""
def rerange(self, nums):
# write your code here
if nums is None or len(nums) < 3:
return
left, right, flag = 0, 0, True
nums.sort()
if len(nums) % 2 == 0:
left, right, flag = 0, len(nums) - 1, True
elif len(nums) % 2 == 1 and nums[len(nums) / 2] < 0:
left, right, flag = 1, len(nums) - 1, False
elif len(nums) % 2 == 1 and nums[len(nums) / 2] > 0:
left, right, flag = 0, len(nums) - 2, False
else:
return
while left <= right:
if left <= right and flag:
left += 1
right -= 1
flag = not flag
elif left <= right and not flag:
nums[left], nums[right] = nums[right], nums[left]
left += 1
right -= 1
flag = not flag