```
function maopao($arr){
$count = count($arr);
if ($count<2){
return $arr;
}
$flag = true;
//flag 做一个标记 ,当flag=true 说明进行了元素交换,默认是true
for($i=0;$i<$count && $flag;$i++){
//如果为flag = false 则说明没有交换,直接停止循环,
//在没加flag之前,即使有序,也会输出N个1--
//echo "1--".PHP_EOL;
$flag = false;
for($j=0;$j<$count-1-$i;$j++){
if($arr[$j] > $arr[$j+1]){
//echo "2--".PHP_EOL;
list($arr[$j],$arr[$j+1]) = [$arr[$j+1],$arr[$j]];
$flag = true;
}
}
}
return $arr;
}
/*
$arr : 正整数数组 M
$start : 开始的位置 从0开始
$count : 初始值为任意取出的元素的个数N,每一次递归count会减一,用于计算每个数的最后一位索引号和判断递归是否继续
$Num : 为常数,值是任意取出的元素的个数N
$res : 记录索引号
$s : 和S
$min : 最小乘积
*/
function arrayN($arr,$start,$count,$Num,$res,$s,&$min){
for($i=$start;$i<count($arr)-$count+1;$i++){
//记录索引号
$res[$count-1]=$i;
if($count-1==0){
$oneResult=[];
for($j=$Num-1;$j>=0;$j--){
array_push($oneResult,$arr[$res[$j]]); //记录当前的组合
}
if(array_sum($oneResult) == $s){ //当前组合求和 与 和S 做笔记啊ddddddd
$min = $min == 0 ? array_product($oneResult) : ($min > array_product($oneResult)? array_product($oneResult) : $min);
}
}else{
arrayN($arr,$i+1,$count-1,$Num,$res,$s,$min);
}
}
}
```
- Go准备工作
- 依赖管理
- Go基础
- 1、变量和常量
- 2、基本数据类型
- 3、运算符
- 4、流程控制
- 5、数组
- 数组声明和初始化
- 遍历
- 数组是值类型
- 6、切片
- 定义
- slice其他内容
- 7、map
- 8、函数
- 函数基础
- 函数进阶
- 9、指针
- 10、结构体
- 类型别名和自定义类型
- 结构体
- 11、接口
- 12、包
- 13、反射
- 14、并发
- 15、网络编程
- 16、单元测试
- Go常用包
- Context
- time
- strings/strconv
- file
- http
- Go常用第三方包
- Go优化
- Go问题排查
- Go框架
- 基础知识点的思考
- 面试题
- 八股文
- 操作系统
- 整理一份资料
- interface
- array
- slice
- map
- MUTEX
- RWMUTEX
- Channel
- waitGroup
- context
- reflect
- gc
- GMP和CSP
- Select
- Docker
- 基本命令
- dockerfile
- docker-compose
- rpc和grpc
- consul和etcd
- ETCD
- consul
- gin
- 一些小点
- 树
- K8s
- ES
- pprof
- mycat
- nginx
- 整理后的面试题
- 基础
- Map
- Chan
- GC
- GMP
- 并发
- 内存
- 算法
- docker