假设数组有n个元素
1.冒泡排序
冒3次泡泡就能找出最大的3个数
复杂度为: (n - 1) + (n - 2) + (n - 3) = 3n - 6
看代码
//冒3下泡泡
func method1(arr []int) []int {
var ret []int ;
step := 0;
var length = len(arr);
for i := 0; i < 3 ; i++ {
for k , v := range arr {
if(k >= length - i){
break;
}
if(k == 0){
continue;
}
step++;
if(v < arr[k - 1]){
//互换
arr[k] = arr[k - 1];
arr[k - 1] = v;
}
}
ret = append(ret , arr[length - i - 1]);
}
println("step:" , step);//3n - 6
return ret;
}
2.动态规划
如果数组只有3个元素,那么最大值就是这3个元素
如果数组有4个元素,那么将第4个元素,和前面3个元素依次对比,找出最大的3个数
如果数组有n个元素,那么将第n个元素和前面n-1个元素里面最大的3个数比较
复杂度为: 3 * (n - 3) = 3n - 9
看代码
//动态规划
func method3(arr []int) []int {
length := len(arr);
if(length <= 3){
return arr;
}else {
one := arr[0];
newArr := arr[1:];
max3 := method3(newArr);
tempArr := append(max3 , one);
for k , v := range tempArr{
if(k == 0){
continue;
}else {
step ++;
if(tempArr[k] > tempArr[k - 1]){
tempArr[k] = tempArr[k - 1];
tempArr[k - 1] = v;
}
}
}
return tempArr[0:3];
}
}