[路飞][LeetCode]912_排序数组

229 阅读1分钟

看一百遍美女,美女也不一定是你的。但你刷一百遍算法,知识就是你的了~~

谁能九层台,不用累土起!

题目地址

题目

给你一个整数数组 nums,请你将该数组升序排列。

示例 1:

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

示例 2:

输入: nums = [5,1,1,2,0,0]
输出: [0,0,1,1,2,5]

提示:

  • 1 <= nums.length <= 5 * 104
  • -5 * 104 <= nums[i] <= 5 * 104

解题思路

  • 我们定义两个指针,一个从前向后,一个从后向前
  • 两个指针分别做不同的事情
  • 从前向后的指针,用于将大值放到右边(遍历范围为该指针-另一指针)
  • 从后向前的指针由于将小值放到左边(遍历范围为该指针-另一指针)

解题代码

var sortArray = function(nums) {
    let low = 0
    let high = nums.length - 1
    while(low < high) {
        // 找到最大值放右边
        for (let i =low;i<high;i++) {
            if(nums[i] > nums[i+1]) {
                [nums[i], nums[i+1]] = [nums[i+1], nums[i]]
            }
        }
        high--;
        // 找到最小值放左边
        for(let j = high;j>low;j--) {
            if (nums[j] < nums[j-1]) {
                [nums[j],  nums[j-1]] = [nums[j-1], nums[j]]
            }
        }
        low++;
    }
    return nums
};

快而简单的方法

var sortArray = function(nums) {
   return nums.sort((a,b)=>a-b)
};

其实最简单,有时候也是最高效的。

如有任何问题或建议,欢迎留言讨论!