练习 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。是否可以不用分配额外的内存?
留言