zoukankan      html  css  js  c++  java
  • 算法基础:正整数指定规则排序问题(Golang实现)

    给定字符串内有非常多正整数,要求对这些正整数进行排序。然后返回排序后指定位置的正整数

    排序要求:依照每一个正整数的后三位数字组成的整数进行从小到大排序
    1)假设不足三位,则依照实际位数组成的整数进行比較
    2)假设相等,则依照输入字符串中的原始顺序排序

    说明(下面内容考生无须检查,调用者保证):
    1) 字符串内正整数之间以单个空格分隔,字符串首尾没有空格
    2) 正整数格式为十进制,大小:1~1000000,正整数的数字非零開始

    演示样例:
    如字符串内容
    1223 22 3232 2016

    依照规定排序后
    2016 22 1223 3232

    查询排序后的第3个数是
    1223

    代码实现:

    package huawei
    
    import (
        "errors"
        "fmt"
        "strconv"
        "strings"
    )
    
    func Test6Base() {
        s := "2115 22 2128 3115 4119 2016 2119"
        findIndex := 2
        result, err := findString(s, findIndex)
        if err == nil {
            fmt.Println("result:", result)
        } else {
            fmt.Println("Error:", err.Error())
        }
    }
    
    //将resString依照指定规则排序,然后返回索引为findIndex位置的字符串
    func findString(resString string, findIndex int) (result int, err error) {
        if resString == "" {
            return -1, errors.New("Param resString is an empty string.")
        }
    
        numsStr := strings.Fields(resString)
        if findIndex < 0 || findIndex > len(numsStr)-1 {
            return -1, errors.New("Param findIndex is invalid.")
        }
    
        numsInt := convertToInt(numsStr)
        //冒泡排序(稳定)
        var change bool = false
        for i := 0; i < len(numsInt)-1; i++ {
            change = false
            for j := 1; j < len(numsInt)-i; j++ {
                if numsInt[j]%1000 < numsInt[j-1]%1000 {
                    change = true
                    numsInt[j], numsInt[j-1] = numsInt[j-1], numsInt[j]
                }
            }
    
            if !change {
                break
            }
        }
    
        fmt.Println(numsInt)
        return numsInt[findIndex], nil
    }
    
    //将[]string转为[]int
    func convertToInt(numsStr []string) []int {
        numsInt := make([]int, len(numsStr))
        for i, v := range numsStr {
            n, err := strconv.Atoi(v)
            checkError(err, "string to integer")
    
            numsInt[i] = n
        }
    
        return numsInt
    }
    
  • 相关阅读:
    Cocos2d-js 开发记录:图片数据资源等的异步加载
    Cocos2d-js 开发记录:声音播放
    Cocos2d-js 开发记录-初始
    PAT 1064 Complete Binary Search Tree
    python 对象属性与 getattr & setattr
    LeetCode Text Justification
    LeetCode Valid Number
    LeetCode String to Integer (atoi)
    struts2--标签取值
    java--Hibernate实现分页查询
  • 原文地址:https://www.cnblogs.com/wzjhoutai/p/7147847.html
Copyright © 2011-2022 走看看