go语言中数组使用的注意事项和细节

Python018

go语言中数组使用的注意事项和细节,第1张

1、数组是多个 相同类型 的数据的组合,一个数组一旦声明/定义了,其 长度是固定的,不能动态变化 。

2、var arr []int    这时arr就是一个slice 切片 。

3、数组中的元素可以是任何数据类型,包括值类型和引用类型,但是 不能混用 。

4、数组创建后,如果没有赋值,有默认值如下:

        数值类型数组:    默认值为 0

        字符串数组:       默认值为 ""

        bool数组:           默认值为 false

5、使用数组的步骤:

        (1)声明数组并开辟空间

        (3)给数组各个元素赋值

        (3)使用数组

6、数组的下标是从0开始的。

7、数组下标必须在指定范围内使用,否则报panic:数组越界,比如var arr [5]int的有效下标为0~4.

8、Go的数组属于 值类型 ,在默认情况下是 值传递 ,因此会进行值拷贝。 数组间不会相互影响。

9、如想在其他函数中去修改原来的数组,可以使用 引用传递 (指针方式)。

10、长度是数组类型的一部分,在传递函数参数时,需要考虑数组的长度,看以下案例:

题1:编译错误,因为不能把[3]int类型传递给[]int类型,前者是数组,后者是切片;

题2:编译错误,因为不能把[3]int类型传递给[4]int类型;

题3:编译正确,因为[3]int类型传给[3]int类型合法。

题目: 给定两个数组,编写一个函数来计算它们的交集.(来自 leecode(349) )

示例 1:

输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2] 示例 2:

输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出:[9,4]

说明:

我的解法:

题目同上,只不过在输出的时候

输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。

示例 1:

输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2,2] 示例 2:

输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出:[9,4]

解法

如果给定的数组是排好序的,

arr1 = [1,2,3,4,4,13],arr2 = [1,2,3,9,10]

那这个返回值该如何获取得两个数组的交集呢?

解法

百位数有4种选择,为与百位数不重复,十位数就只有3种选择了;同样道理,个位数就只有2种选择。所以1、2、3、4等4个数字能组成4x3x2共24种互不相等且没有重复数字的3位数。根据上述原理,可用一个3层嵌套for循环来完成,代码如下:

#include "stdio.h"

int main(int argc,char *argv[]){

int i,j,k,t

printf("A total of %d no repeat number 3-digits, they are as follows:\n",4*3*2)

for(t=0,i=1i<=4i++)//百位数字有4种选择

for(j=1j<=4j++)//十位数字有3种选择

if(j!=i)//遇到十位数字等于百位数字时跳过

for(k=1k<=4k++)//个位数字只有2种选择了

if(k!=i && k!=j)//个位数字与十位或百位数字相等时跳过

printf(++t%10 ? "%4d" : "%4d\n",i*100+j*10+k)//输出该三位数

if(t%10)

printf("\n")

return 0

}

扩展资料

#include<stdio.h>

main()

{

int i, j, k

int m=0

for(i=1i<5i++)

for(j=1j<5j++)

for(k=1k<5k++)

{

if(i!=j&&k!=j&&i!=k)

{

printf("%d%d%d\n",i,j,k)

m++

}

}

printf("%d\n",m)

getch()

}