练习 4.3: 重写reverse函数,使用数组指针代替slice。

func reverse(s *[]int) {
    for i, j := 0, len(*s)-1; i < j; i, j = i+1, j-1 {
        (*s)[i], (*s)[j] = (*s)[j], (*s)[i]
    }
}

练习 4.4: 编写一个rotate函数,通过一次循环完成旋转。

原地实现

func rotate(s *[]int, pos int){
    for i:=0;i<pos;i++{
        (*s)[i], (*s)[len(*s)-pos+i] = (*s)[len(*s)-pos+i], (*s)[i]
    }
    for i:=pos;i<len(*s)-pos;i++{
        (*s)[i], (*s)[i-pos] = (*s)[i-pos], (*s)[i]
    }
}

练习 4.5: 写一个函数在原地完成消除[]string中相邻重复的字符串的操作。

快慢指针法

func remove_reduplicate(s *[]string) []string{
    i := 0
    for j := 0;j<len(*s);j++{
        if (*s)[j] != (*s)[i]{
            i++
            (*s)[i] = (*s)[j]
        }
    }
    return (*s)[:i+1]
}

练习 4.6: 编写一个函数,原地将一个UTF-8编码的[]byte类型的slice中相邻的空格(参考unicode.IsSpace)替换成一个空格返回

练习 4.7: 修改reverse函数用于原地反转UTF-8编码的[]byte。是否可以不用分配额外的内存?

最后修改日期: 2022年2月8日

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。