博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
知乎上小米变相约瑟夫环面试题微软解法的golang代码
阅读量:6431 次
发布时间:2019-06-23

本文共 1876 字,大约阅读时间需要 6 分钟。

hot3.png

原题: 一副从1到n的牌,每次从牌堆顶取一张放桌子上,再取一张放牌堆底,直到手机没牌,最后桌子上的牌是从1到n有序,设计程序,输入n,输出牌堆的顺序数组 。

微软君给的算法: 取一个1~n的数组,这里为了说明取n=5。按照题目中的规则变换,得到数组:[1 3 5 4 2],将该数组下标与值互换得到[1 5 2 4 3],即为答案。解释:[1 3 5 4 2]的意义是,经过变换,原数组中3号位置的数字现在2号槽,原数组中5号位置的数字现在3号槽... 现在已知变换后的槽存放的是1~n,故只需将下标与值互换即可得到待求数组。

// joseph/*# golang代码 变相约瑟夫环。知乎上一个小米面试题的微软解法(细节去知乎找找看)## 原题: 一副从1到n的牌,每次从牌堆顶取一张放桌子上,再取一张放牌堆底,直到手机没牌,最后桌子上的牌是从1到n有序,设计程序,输入n,输出牌堆的顺序数组 。## 微软君给的算法: 取一个1~n的数组,这里为了说明取n=5。按照题目中的规则变换,得到数组:[1 3 5 4 2],将该数组下标与值互换得到[1 5 2 4 3],即为答案。解释:[1 3 5 4 2]的意义是,经过变换,原数组中3号位置的数字现在2号槽,原数组中5号位置的数字现在3号槽... 现在已知变换后的槽存放的是1~n,故只需将下标与值互换即可得到待求数组。#*/// 此代码用了list,肯定有效率问题。以后考虑改进。// 我的golang技能生疏了不少package mainimport (	"container/list"	"fmt")// 构成顺序数组func make_array(n int) *list.List {	array := list.New()	for i := 1; i <= n; i++ {		array.PushBack(i)	}	return array}// 生成中间数组func count_mid_array(array *list.List) *list.List {	mid_array := list.New()	for array.Len() > 1 {		t1 := array.Front()		mid_array.PushBack(t1.Value)		array.Remove(t1)		t2 := array.Front()		array.Remove(t2)		array.PushBack(t2.Value)	}	mid_array.PushBack(array.Front().Value)	return mid_array}// 转换中间组到最终结果func trans_array(n int, new_array *list.List) *list.List {	fin_array := list.New()	for i := 1; i <= n; i++ {		idx := 0		for e := new_array.Front(); e != nil; e = e.Next() {			idx++			if e.Value == i {				fin_array.PushBack(idx)			}		}	}	return fin_array}// 打印list函数func PrintList(l *list.List) {	if l != nil {		fmt.Printf("[")		for e := l.Front(); e != nil; e = e.Next() {			fmt.Printf("%d", e.Value)			if e.Next() != nil {				fmt.Print(", ")			}		}		fmt.Printf("]\n")	}}// 约瑟夫环入口func joseph() {	fmt.Println("----====joseph run====----")	var n int = 12	array := make_array(n)	PrintList(array)	mid_array := count_mid_array(array)	PrintList(mid_array)	fin_array := trans_array(n, mid_array)	PrintList(fin_array)}

 

转载于:https://my.oschina.net/raddleoj/blog/1944161

你可能感兴趣的文章
【函数】06、装饰器的应用
查看>>
v$sysstat
查看>>
剑指offer 66通关纪念
查看>>
医疗信息化 医学 医院管理 医疗器械 资料下载
查看>>
nginx.conf 示例配置
查看>>
在办公电脑上设置日志服务器监控思科和华为设备
查看>>
python 字符串替换
查看>>
我的友情链接
查看>>
Linux之常用网络命令
查看>>
linux php 安装 curl
查看>>
思科rip、dhcp、vlan
查看>>
tomcat nginx默许的post大小限制
查看>>
OSI七层模型
查看>>
去除工程的.svn隐藏文件夹
查看>>
Python24 终端如何输出彩色字体
查看>>
XSS跨站脚本***
查看>>
linux 挂载光驱
查看>>
ASP.NET MVC Area操作
查看>>
CSS颜色代码大全
查看>>
LINQ之路10:LINQ to SQL 和 Entity Framework(下)
查看>>