0026 - Remove Duplicates from Sorted Array

Golang Leetcode 問題: 0026 - Remove Duplicates from Sorted Array

題目

傳入排序過的數字陣列,並移除重複的數字

答案

func removeDuplicates(nums_list []int) int {
    if len(nums_list) == 0 {
        // 若沒有數字資料
        return 0
    }
    // 數字清單長度
    num_list_length := len(nums_list)
    // 最大數字所在索引
    max_num_index := num_list_length -1
    // 最後一個非重複數字索引
    last_none_duplicate_num_index := 0
    // 非重複數字搜尋索引
    non_duplicate_num_finder_index := 0


    for last_none_duplicate_num_index < max_num_index {
        // 最後一個非重複數字索引不是最後一個項目,繼續往後找
        for nums_list[non_duplicate_num_finder_index] == nums_list[last_none_duplicate_num_index] {
            // 若持續找到相同的數字,繼續往後找,直到數字不同在跳出
            non_duplicate_num_finder_index++

            if non_duplicate_num_finder_index == num_list_length {
                // 找到最後一個項目,非重複的長度為最後一個項目索引 +1
                return last_none_duplicate_num_index + 1
            }
        }

        // 將非重複元素索引往後移動
        last_none_duplicate_num_index++
        // 找到不同的元素了,將找到的不同元素複製到前方
        nums_list[last_none_duplicate_num_index] = nums_list[non_duplicate_num_finder_index]
    }

    return last_none_duplicate_num_index + 1
}

完整程式碼

package main

import (
    "fmt"
)

type QuestionList struct {
    Parameter
    Answer
}

// Parameter 是参数
// nums_list 代表第一个参数
type Parameter struct {
    nums_list []int
}

// Answer 是答案
// nums 代表第一个答案
type Answer struct {
    nums int
}


func main() {

    question_list := []QuestionList{
        {
            Parameter{[]int{1, 1, 2}},
            Answer{2},
        },

        {
            Parameter{[]int{0, 0, 1, 1, 1, 1, 2, 3, 4, 4}},
            Answer{5},
        },

        {
            Parameter{[]int{0, 0, 0, 0, 0}},
            Answer{1},
        },
        {
            Parameter{[]int{1}},
            Answer{1},
        },
    }

    fmt.Printf("------------------------Leetcode Problem 26------------------------\n")

    for _, question := range question_list {
        Ans, Param := question.Answer, question.Parameter
        fmt.Printf("【input】:%v  answer:%+v  【output】:%v\n", Param.nums_list, Ans.nums, removeDuplicates(Param.nums_list))
    }

}

func removeDuplicates(nums_list []int) int {
    if len(nums_list) == 0 {
        // 若沒有數字資料
        return 0
    }
    // 數字清單長度
    num_list_length := len(nums_list)
    // 最大數字所在索引
    max_num_index := num_list_length -1
    // 最後一個非重複數字索引
    last_none_duplicate_num_index := 0
    // 非重複數字搜尋索引
    non_duplicate_num_finder_index := 0


    for last_none_duplicate_num_index < max_num_index {
        // 最後一個非重複數字索引不是最後一個項目,繼續往後找
        for nums_list[non_duplicate_num_finder_index] == nums_list[last_none_duplicate_num_index] {
            // 若持續找到相同的數字,繼續往後找,直到數字不同在跳出
            non_duplicate_num_finder_index++

            if non_duplicate_num_finder_index == num_list_length {
                // 找到最後一個項目,非重複的長度為最後一個項目索引 +1
                return last_none_duplicate_num_index + 1
            }
        }

        // 將非重複元素索引往後移動
        last_none_duplicate_num_index++
        // 找到不同的元素了,將找到的不同元素複製到前方
        nums_list[last_none_duplicate_num_index] = nums_list[non_duplicate_num_finder_index]
    }

    return last_none_duplicate_num_index + 1
}

參考資料