去重并排序

Duplicate Removal and Sort

Posted by BY on August 1, 2020

前言

猛起更新。

正文

问题来源

今天被人问到一个问题。

问题描述

给你一个数组,给出去重并排序。

示例 1:

输入: [20,15,80,20,100,15,100]
输出: [15,20,80,100] 4

分析:

双指针+选择排序

func sort(nums []int) int {
    m := nums[0]
    mi := 0
    for i := 1; i < len(nums); i++ {
        if m > nums[i] {
            m = nums[i]
            mi = i
        }
    }
    nums[0], nums[mi] = nums[mi], nums[0]
    i, j := 1, 1
    for j < len(nums) {
        mi = j
        m = nums[j]
        for k := j+1; k < len(nums); k++ {
            if m > nums[k] {
                m = nums[k]
                mi = k
            }
        }
        nums[i] = nums[mi]
        nums[mi] = nums[j]
        if nums[i-1] == nums[i] {
            j++
        } else {
            i++
            j++
        }
    }
    return i
}

总结:

勤思考。

结语

不管怎么样好好加油。