【面试题 10.11】峰与谷

题目

题目链接
在一个整数数组中,“峰”是大于或等于相邻整数的元素,相应地,“谷”是小于或等于相邻整数的元素。例如,在数组{5, 8, 6, 2, 3, 4, 6}中,{8, 6}是峰, {5, 2}是谷。现在给定一个整数数组,将该数组按峰与谷的交替顺序排序。
示例:

输入: [5, 3, 1, 2, 3]
输出: [5, 1, 3, 2, 3]

提示:
nums.length <= 10000

解题思路

先排序,在双指针插入。
插入规律满足尾 头 尾 头。。。
例如例子:

5 3 1 2 3

1.则先进行排序:

1 2 3 3 5

2.双指针依次插入 满足尾 头 尾 头。。。

5 1 3 2 3

代码

class Solution {
    public void wiggleSort(int[] nums) {
        //判空和数组中一个元素情况
        if (nums.length > 1) {
            int[] answers = new int[nums.length];
            //排序
            Arrays.sort(nums);
            //双指针插入元素 尾头尾头直到左右指针相遇
            int left = 0;
            int right = nums.length - 1;
            int i = 0;
            while (left <= right) {
                answers[i++] = nums[right--];
                //若数组个数是奇数则左右指针其中一个复制之后另一个不需要复制了
                if (left > right) {
                    break;
                }
                answers[i++] = nums[left++];
                //边界条件
                if (left > right) {
                    break;
                }
            }
            //拷贝数组
            System.arraycopy(answers, 0, nums, 0, answers.length);

        }

    }
}

【面试题 10.11】峰与谷_第1张图片

你可能感兴趣的:(#,leetcode,leetcode)