Interleaving Positive and Negative Numbers
2017-11-18 20:14
417 查看
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.
Have you met this question in a real interview?
Yes
Example
Given
一个写的并不简洁的代码
java
简化后的代码
java
python
Notice
You are not necessary to keep the original order of positive integers or negative integers.
Have you met this question in a real interview?
Yes
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
相关文章推荐
- Lintcode - Interleaving Positive and Negative Numbers
- lintcode:Interleaving Positive and Negative Numbers
- [LintCode] Interleaving Positive and Negative Numbers
- Lintcode144 Interleaving Positive And Negative Numbers solution 题解
- Interleaving Positive and Negative Numbers
- LintCode Interleaving Positive and Negative Numbers
- LintCode "Interleaving Positive and Negative Numbers"
- [leetcode]Interleaving Positive and Negative Numbers
- Interleaving Positive and Negative Numbers
- Lintcode: Interleaving Positive and Negative Numbers
- *[Lintcode]Interleaving Positive and Negative Numbers 交错正负数
- LintCode-Interleaving Positive and Negative Numbers.
- 代码面试题:Interleaving Negative and Positive Numbers 正负交替
- lintcode-medium-Interleaving Positive and Negative Numbers
- Counting positive and negative number and computing the average of numbers
- You’re given an array containing both positive and negative integers and required to find the sub-a
- hdu 5183 Negative and Positive (NP)
- HDU 5183 Negative and Positive (NP) (set + 读入外挂 乱搞)
- Negative and Positive (NP) HDU5183 && Bestcoder#32
- hdu 5183-Negative and Positive (NP) (hash+输入外挂)