找到丢失的书页可以通过以下几种方法:
排序和遍历
将所有页码进行排序,时间复杂度为O(nlogn)。
遍历排序后的数组,检查相邻元素的差值,如果差值不为1,则缺失的页码即为差值为1的前一个元素。
使用bitset数组
创建一个长度为n的bitset数组,用于标记页码是否出现。
遍历整个数组,将出现的页码对应的下标置为1。
遍历bitset数组,找到第一个值为0的下标,该下标即为缺失的页码。
桶排序思想
遍历数组,将每个页码放到其值对应的索引位置。
通过这种方式,最终会有一个页码无法放到正确的位置,该页码即为缺失的页码。
代码示例
```cpp
include include using namespace std; int main() { vector int temp_val, temp; for (int i = 0; i < b.size(); i++) { if (b[i] != i) { if (b[i] == -1) continue; else { temp_val = b[b[i]]; b[b[i]] = b[i]; b[i] = temp_val; } } } for (int i = 0; i < b.size(); i++) { if (b[i] != i) { cout << "缺失的页码是: "<< i << endl; break; } } return 0; } ``` 建议 选择合适的方法:根据具体需求和数据规模选择最合适的方法。如果数据量较小,排序和遍历可能更简单直接;如果数据量较大,使用bitset数组或桶排序可能更高效。 优化空间复杂度:如果内存有限,可以考虑使用bitset数组来节省空间,尽管它的时间复杂度较高。 希望这些方法能帮助你找到丢失的书页。