Interleaving Positive and Negative Numbers

来源:互联网 发布:ubuntu nvidia 分辨率 编辑:程序博客网 时间:2024/06/14 16:10

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

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                


阅读全文
0 0
原创粉丝点击