使数组中小于k的元素相邻的最小交换次数
package main import ( "bufio" "fmt" "math" "os" "sort" "strconv" "strings" ) /* 描述:给出数字k,请输出所有结果小于k的整数组合到一起的最小交换次数。 组合一起是指满足条件的数字相邻,不要求相邻后在数组中的位置。 数据范围 -100 <= k <= 100 -100 <= 数组中的值 <= 100 示例: 第一行输入数据:第二行输入k数值: 1 3 1 4 0 2 输出 1 样例输入2: 第一行输入数据:第二行输入k数值 0 0 1 0 2 输出 0 样例输入3: 第一行输入数据:第二行输入k数值: 2 3 2 1 输出 0 */ // 数组中小于k的元素的下标组成新数组,遍历该新数组,计算距离组成距离数组,取最小的即为最小交换次数 func main() { input := bufio.NewScanner(os.Stdin) input.Scan() arrStr := input.Text() li := strings.Split(arrStr," ") keyArr := make([]int,0) // 数组中小于k的元素的下标组成的数组 disArr := make([]int,0) // 上述数组中元素的距离值组成的新数组 input.Scan() k,_:= strconv.Atoi(input.Text()) for i:=0;i<len(li);i++{ data,_ := strconv.Atoi(li[i]) if data < k { keyArr = append(keyArr,i) } } if len(keyArr) > 1 { for i:=0;i<len(keyArr);i++{ for j:=i+1;j<len(keyArr);j++{ // 二次遍历从下一个元素开始计算 s := math.Abs(float64(keyArr[i]-keyArr[j] ))-1 //距离计算:想减绝对值 - 1 disArr = append(disArr,int(s)) } } } if len(disArr) > 0 { sort.Ints(disArr) }else{ fmt.Println(0) } }