lixiaolin123
4 天前
### 1. **看到题目,立即匹配“套路”**
* 例如,看到“求最短路径”,就直接套 **Dijkstra** 或 **Floyd-Warshall**,而不思考:
* 是否有 **无向图?**
* 是否是 **负权边?**
* 是否有 **更优的算法?(如 A*,BFS 适用于无权图)**
* 这样做虽然能解一些题目,但如果稍微变形,你可能就不会做了。
### 2. **不理解算法本质**
* 你可能会背很多算法模板,比如:
```
void quickSort(int arr[], int left, int right) {
if (left >= right) return;
int pivot = partition(arr, left, right);
quickSort(arr, left, pivot - 1);
quickSort(arr, pivot + 1, right);
}
```
* 但如果面试官问:
* **为什么要选 pivot ?**
* **什么时候会退化到 O(n²)?**
* **如何优化(随机化、三路快排)?**
* 你可能答不上来,说明你只是机械地记住了代码,而不是理解它的工作原理。
### 3. **遇到变形题就卡住**
* **例子:**
* 你学过 **二分查找**,会写:
```
int binarySearch(int arr[], int n, int target) {
int left = 0, right = n - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == target) return mid;
else if (arr[mid] < target) left = mid + 1;
else right = mid - 1;
}
return -1;
}
```
* 但是如果题目要求:
* **查找第一个 >= target 的元素**
* **查找最后一个 <= target 的元素**
* 你可能不会写,或者不知道如何调整 `left` 和 `right` 的边界。
### 4. **忽视复杂度分析**
* 面试官可能问:
* 你的算法的时间复杂度是多少?
* 是否可以进一步优化?
* 如果你只是写出代码,而不能解释复杂度,说明你只是“套模板”而没有深入思考。