/** * 找找第k个数在第几堆里,例如: * int k = 25; * int[] array = new int[]{10, 12, 14, 15}; * 答案是 3 . * * @param heaps * @param k * @return */ public static int whereAmI(int[] heaps, int k) { if (null == heaps || 0 == heaps.length || 0 >= k) { return -1; } int[] heapRecord = new int[heaps.length]; int sum = 0; for (int i = 0; i < heaps.length; i++) { sum += heaps[i]; heapRecord[i] = sum; } if (k > sum) { return -1; } return 1 + whereAmI(heapRecord, 0, heaps.length - 1, k); } private static int whereAmI(int[] heapRecord, int start, int end, int k) { if (start >= end) { return start; } int mid = start + (end - start) / 2; if (heapRecord[mid] == k) { return mid; } if (heapRecord[mid] < k) { return whereAmI(heapRecord, mid + 1, end, k); } return whereAmI(heapRecord, start, mid - 1, k); } 继续阅读与本文标签相同的文章
上一篇 :
【基础】固定列宽的表格及示例演示
下一篇 :
泛型希尔排序
-
0723-6.2.0-如何在RedHat7.2使用rpm安装CDH(有CM)
2026-05-25栏目: 教程
-
0724-6.2.0-CM接管rpm方式安装的无CM的CDH集群
2026-05-25栏目: 教程
-
golang插件化方案
2026-05-25栏目: 教程
-
Apache Submarine
2026-05-25栏目: 教程
-
Impala查询卡顿分析案例
2026-05-25栏目: 教程
