1. 程式人生 > >leedcode_找出旋轉有序數列的中間值

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))) } }