• go语言*slice章节习题


    github地址
    笔记

    题目

    slice

    测试文件我放在github中了,每个习题都有测试
    练习 4.3: 重写reverse函数,使用数组指针代替slice。

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

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

    func rotate(t []int,n int)[]int  {
    	/*
    		这个地方我起初写成
    		tmp := t[:n]
    		测试是发现始终输出:[3,4,5,3,4]
    		才想起来这是 浅拷贝,是浮动的
    		正确使用要使用深拷贝去给tmp赋值
    	*/
    	tmp := make([]int,n)
    	copy(tmp,t[:n])
    	copy(t[:len(t)-n],t[n:])
    	copy(t[len(t)-n:],tmp[:])
    	return t
    }
    

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

    func unique(s []string) []string {
    	k := 0
    	for _,w :=range s{
    		if s[k]==w {
    			continue
    		}
    		k++
    		s[k]=w
    	}
    	return s[:k+1]
    }
    

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

    func replaceSpace(b []byte) []byte {
    	end :=len(b)
    	for i:=0;i<len(b) ;i++  {
    
    		if !unicode.IsSpace(rune(b[i])) {
    			continue
    		}else {
    			spaceCount :=0
    			cpyStart :=i
    			for unicode.IsSpace(rune(b[i]))  {
    				i++
    				spaceCount++
    			}
    			end =end-spaceCount+1
    			copy(b[cpyStart:],b[cpyStart+spaceCount-1:])
    			i = cpyStart
    		}
    	}
    	return b[:end]
    }
    

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

    func reverseInPlace(s []byte) []byte {
    	for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {
    		s[i], s[j] = s[j], s[i]
    	}
    	return s[:]
    }
    
  • 相关阅读:
    Servlet学习笔记3
    Servlet学习笔记2
    Servlet 学习笔记1
    Response对象学习笔记
    【JavaSE】异常
    【JavaSE】格式化输出
    【JavaSE】泛型
    【JavaSE】集合
    【SpringBoot】(1)-- 基于eclipse配置springboot开发环境
    【Linux】(1)安装
  • 原文地址:https://www.cnblogs.com/Jun10ng/p/12767817.html
Copyright © 2020-2023  润新知