leedcode_找出旋转有序数列的中间值

  • 描述

给出一个有序数列随机旋转之后的数列,如原有序数列为:[0,1,2,4,5,6,7] ,旋转之后为[4,5,6,7,0,1,2]。
假定数列中无重复元素,且数列长度为奇数。
求出旋转数列的中间值。如数列[4,5,6,7,0,1,2]的中间值为4。

  • 输入

4,5,6,7,0,1,2

  • 输出

4。

输入样例
1

1,2,3

4,5,6,7,0,1,2

12,13,14,5,6,7,8,9,10
输出样例
1

2

4

9
  • go实现

思路

经过推理我们会发现有序数列随机旋转后的数列大小发生的变化的位置便是有序数列移动的位数。找到数列旋转的位置就可以判断出中位数了。

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

func solution5(line string) string {
	strArray := strings.Split(line, ",")
	length:=(len(strArray))/2
	var index int
	var value int
	for i,v:=range strArray{
		if i==0{
			value, _ = strconv.Atoi(v)
			continue
		}
		value2, _ := strconv.Atoi(v)
		if value>value2{
			index=i
			break
		}
		value,_=strconv.Atoi(v)
	}
	if index<=length{
		return strArray[index+length]
	}else {
		return strArray[index-length-1]
	}
}

func main() {
	r := bufio.NewReaderSize(os.Stdin, 20480)
	for line, _, err := r.ReadLine(); err == nil; line, _, err = r.ReadLine() {
		fmt.Println(solution5(string(line)))
	}
}
发布了51 篇原创文章 · 获赞 33 · 访问量 4万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术工厂 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览