最近准备学习算法132,网上思路很多,代码表达也各有千秋
借鉴网上的思路,
// 以下代码逻辑为: // 遍历arrayList数组长度,每个value都是aj,之后得到左边的最小值ai,如果小于aj // ,则用ai和aj两个值对比右边的a(j+1)~arraylist.size中看有没有符合的数值
因为每个人的认知和思维不同,以下是本人写出来的一种解答方式,亲测有效,循环遍历次数少,仅限参考 int ai = arrayList.get(0); int aj = 0; int ak = 0; for(int j = 1;j<(arrayList.size()-1);j++){ //当前中间的数值,需要是最大的数值 aj = arrayList.get(j); //每次索引往下走一次则判断之前是否是索引0~j之间的最小值,如果j-1是最小值,则重新赋值ai if(ai>arrayList.get(j-1)){ ai = arrayList.get(j-1); } //在aj大于ai的情况下,才去循环遍历获取索引j+1~arrayList.size中,获取对应的ak if(aj>ai){ for(int k=j+1;k<arrayList.size();k++){ ak = arrayList.get(k); Log.i("tag","ak="+arrayList.get(k)+";ai="+ai+";aj="+aj); if(aj>ak && ak>ai){ //则存在满足132算法的排序 Log.i("tag","满足算法的排序的数据为:ai="+ai+",aj="+aj+",ak="+ak); return; } } } }
在此提供自己的代码