那些插队的人
那些插队的人
http://www.nowcoder.com/questionTerminal/31c1ae9d1c804b66b6ae17181e76f4f0
关键点都在代码注释里了
package main
/**
* 计算有多少个人最终不在自己原来的位置上
* @param n int整型 队伍总长
* @param cutIn int整型一维数组 依次会插队到最前方的人的编号
* @return int整型
*/
func countDislocation( n int , cutIn []int ) int {
// write code here
m := len(cutIn)
if m == 0 {
return 0
}
appeared := make(map[int]bool)
curIndex := 1
cnt := 0
//统计位置没有发生变化的人数
maxIndex := cutIn[0]
//插队序列最大编号
for i := m-1; i >= 0; i-- {
if !appeared[cutIn[i]] {
appeared[cutIn[i]] = true
if cutIn[i] == curIndex {
cnt++
}
curIndex++
if cutIn[i] > maxIndex {
maxIndex = cutIn[i]
}
}
}
return maxIndex-cnt
//大于插队中最大编号的序列都是正确的,因此在发生插队行为这一段中,减去位置正确的,就是位置发生了改变的。
}

