算法基础:正整数指定规则排序问题(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
}
算法基础:正整数指定规则排序问题(Golang实现)的更多相关文章
- Levenberg-Marquardt算法基础知识
Levenberg-Marquardt算法基础知识 (2013-01-07 16:56:17) 转载▼ 什么是最优化?Levenberg-Marquardt算法是最优化算法中的一种.最优化是寻找使 ...
- 解读Raft(一 算法基础)
最近工作中讨论到了Raft协议相关的一些问题,正好之前读过多次Raft协议的那paper,所以趁着讨论做一次总结整理. 我会将Raft协议拆成四个部分去总结: 算法基础 选举和日志复制 安全性 节点变 ...
- Python之算法基础
1>递归相关: 递归:递归算法是一种直接或间接地调用自身算法的过程,在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且 易于 ...
- JVM-垃圾收集算法基础
目录 目录 前言 手动释放内存导致的问题 垃圾判定方法 哪些对象是垃圾? 引用计数算法 可达性分析法 垃圾收集算法 标记-清除 优点 缺点 优化 标记-复制 优点 缺点 优化 标记-整理 优点 缺点 ...
- Mahout推荐算法基础
转载自(http://www.geek521.com/?p=1423) Mahout推荐算法分为以下几大类 GenericUserBasedRecommender 算法: 1.基于用户的相似度 2.相 ...
- Spring Boot-------JPA基础及查询规则
JPA基础及查询规则 JPA JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数 ...
- 腾讯2017年暑期实习生编程题【算法基础-字符移位】(C++,Python)
算法基础-字符移位 时间限制:1秒 空间限制:32768K 题目: 小Q最近遇到了一个难题:把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,且不能申请额外的空间. 你能帮帮小Q吗? ...
- 算法基础_递归_求杨辉三角第m行第n个数字
问题描述: 算法基础_递归_求杨辉三角第m行第n个数字(m,n都从0开始) 解题源代码(这里打印出的是杨辉三角某一层的所有数字,没用大数,所以有上限,这里只写基本逻辑,要符合题意的话,把循环去掉就好) ...
- 毕业设计预习:SM3密码杂凑算法基础学习
SM3密码杂凑算法基础学习 术语与定义 1 比特串bit string 由0和1组成的二进制数字序列. 2 大端big-endian 数据在内存中的一种表示格式,规定左边为高有效位,右边为低有效位.数 ...
随机推荐
- CAD绘制标记(网页版)
主要用到函数说明: MxDraw::GetCursorPickRect 返回拾取矩形框的宽度,默认值为6.详细说明如下: 参数 说明 IN MXDRAWOCXHANDLE hOcx 控件窗口句柄 OU ...
- webstorm下开发微信小程序
- hdfs深入:03、hdfs的架构以及副本机制和block块存储
HDFS分布式文件系统设计目标 1. 硬件错误 由于集群很多时候由数量众多的廉价机组成,使得硬件错误成为常态 2. 数据流访问 所有应用以流的方式访问数 ...
- 级数求和(C++)
题目描述 已知:Sn=1+1/2+1/3+…+1/n.显然对于任意一个整数K,当n足够大的时候,Sn大于K. 现给出一个整数K(1≤K≤15),要求计算出一个最小的n:使得Sn>K. 输入 ...
- 分分钟钟学会Python - 文件操作
文件操作 1 文件基本操作 obj = open('路径',mode='模式',encoding='编码') obj.write() # 写入 obj.read() # 读取 obj.close() ...
- LeetCode(30) Substring with Concatenation of All Words
题目 You are given a string, s, and a list of words, words, that are all of the same length. Find all ...
- 九度oj 题目1525:子串逆序打印
题目1525:子串逆序打印 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:3124 解决:530 题目描述: 小明手中有很多字符串卡片,每个字符串中都包含有多个连续的空格,而且这些卡片在 ...
- [Wf2015]Tours
[Wf2015]Tours 题目 给定一张n个点m条边的无向图,你需要选择一个颜色种类数k,然后用这k种颜色给每条边染色,要求对于图中任意一个简单环,每种颜色的边的数量都相同,求所有可行的k INPU ...
- hdu 1251简单字典树
#include<stdio.h> #include<iostream> #include<string.h> using namespace std; struc ...
- SpringBoot Data JPA 关联表查询的方法
SpringBoot Data JPA实现 一对多.多对一关联表查询 开发环境 IDEA 2017.1 Java1.8 SpringBoot 2.0 MySQL 5.X 功能需求 通过关联关系查询商店 ...