如何改进这里的3层for循环?
来源:7-12 订单模块 - 判断是否已售座位

Sweet2021
2022-07-12
老师,这个地方有哪些优化的思路吗?
写回答
2回答
-
慕UI0546731
2023-08-09
下面是对给定代码的二分法优化,并使用中文解释:
List<MoocOrderT> list = moocOrderTMapper.selectList(entityWrapper); String[] seatArrs = seats.split(","); // 有任何一个编号匹配上,则直接返回失败 for (MoocOrderT moocOrderT : list) { String[] ids = moocOrderT.getSeatsIds().split(","); Arrays.sort(ids); // 对ids数组进行排序 for (String seat : seatArrs) { if (binarySearch(ids, seat)) { return false; } } } // 二分查找 private boolean binarySearch(String[] arr, String target) { int left = 0; int right = arr.length - 1; while (left <= right) { int mid = left + (right - left) / 2; int cmp = arr[mid].compareToIgnoreCase(target); if (cmp == 0) { return true; } else if (cmp < 0) { left = mid + 1; } else { right = mid - 1; } } return false; }
代码优化解释:
1. 首先,对每个 `MoocOrderT` 对象的 `ids` 数组进行排序,以便使用二分查找。
2. 使用二分查找算法 `binarySearch` 来查找 `seatArrs` 中的每个元素是否在排序后的 `ids` 数组中。
3. 如果找到匹配的编号,直接返回 `false` ,因为只要有一个匹配,就表示失败。
通过使用二分法优化,可以在较大的数据集上提高查找效率。
00 -
Allen
2022-07-28
有好多思路, 最简单的就是可以考虑把表改成纵表,一个查询就出来了
022022-07-29
相似问题