数字列表正负数分开算法golang实现

脉脉上看到有人发的笔试算法,最近在学习go语言,心血来潮就用go语言实现了一下

算法思路:

  • 遍历数组,标记第一个负数的位置
  • 往后遍历碰到第一个正数,就把正数往左边移动

源码如下:

package main

import (
    "fmt"
)


func main() {


	var list []int = []int{1, 2, 3, -2, -4, 5, 3, -2, 4, 1, -5, 3}
	list = sepa(list)

	fmt.Printf("%v",list)
}


//正数在左边,负数在右边
func sepa(list []int) []int {
	firstNegative := -1
	for key, val := range list {
		if val < 0 {
			if (firstNegative == -1) {
				firstNegative = key
			}
			continue
		} else if val > 0 {
			if firstNegative > 0 {
				for j := key ; j > firstNegative; j--  {
					t := list[j]
					list[j] = list[j-1]
					list[j-1] = t
				}
				firstNegative++
			}
		}

	}
	return list
}

得到结果:[1 2 3 5 3 4 1 3 -2 -4 -2 -5]

 

转载于:https://my.oschina.net/forMemory/blog/3041259

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值