题解 | 奇数下标都是奇数或者偶数下标都是偶数

奇数下标都是奇数或者偶数下标都是偶数

https://www.nowcoder.com/practice/335823db14b945ab95241a74cfcf1ae7

package main

import (
    "fmt"
)

func main() {
    row := 0
    for {
        n, _ := fmt.Scan(&row)
        if n == 0 {
            break
        } else {
            arr := make([]int, row)
            for i := 0; i < len(arr); i++ {
				fmt.Scan(&arr[i])
			}
            process(arr)
            for i:=0; i<len(arr); i++ {
                fmt.Printf("%d ", arr[i])
            }
        }
    }
}

func process(arr []int) {
    // 记录冲突位置所在
    eve, odd := 0, 1
    n := len(arr)
    // 每次交换最后一个位置,只看最后一个值,就可以避免交换的值影响查找范围
	for odd < n && eve < n {
        if arr[n-1] % 2 == 1 {
            arr[n-1], arr[odd] = arr[odd],  arr[n-1]
            odd+=2
        } else {
            arr[n-1], arr[eve] = arr[eve],  arr[n-1]
            eve+=2
        }
    }
}

// 2个队列,接收奇数,偶数,依次放入
// func process(arr []int) {
//     odd := []int{}
// 	eve := []int{}

// 	for i := 0; i < len(arr); i++ {
// 		if arr[i]%2 == 0 {
// 			odd = append(odd, arr[i])
// 		} else {
// 			eve = append(eve, arr[i])
// 		}
// 	}

// 	k := 0
// 	i, j := 0, 0
// 	for i < len(odd) && j < len(eve) {
// 		arr[k], arr[k+1] = odd[i], eve[j]
// 		k += 2
// 		i++
// 		j++
// 	}

// 	for i < len(odd) {
// 		arr[k] = odd[i]
// 		i++
// 		k++
// 	}

// 	for j < len(eve) {
// 		arr[k] = eve[j]
// 		j++
// 		k++
// 	}
// }

全部评论

相关推荐

目前大二,中流211,这个简历能找到实习嘛?想知道八股要背到什么程度能开始投简历呢tot能投大厂吗
牛客44176770...:兄弟,先不急着找大厂实习吧,真的😭面试问的挺深的,会表面八股根本行不通,你的项目人家都没心情问😭小厂实习可以去吧,我就是有个小厂实习才有一个且仅有一个约面机会。而且,一开始就先问算法题,然后是八股MySQLRedis这些。你平时看这些,以为自己会了,但是在面试中问你,对于MySQL你了解多少,你能在面试中有逻辑的回答出来吗?而且,你大二,人家对你的项目根本不感兴趣,只问你基础。唉今天刚结束百度一面,我这几天都重点复盘了做过的项目,结果根本不问,问就问一个lua脚本怎么写。😭真的兄弟,咱不是天才,真得一步一步来,扎实基础😔😔
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务