双指针法:适用于有序数组去重、两数之和等问题。通过左右指针减少时间复杂度至O(n)。
示例代码:
c复制插入
int removeDuplicates(int* nums, int numsSize) { if (numsSize == 0) return 0; int slow = 0; for (int fast = 1; fast < numsSize; fast++) { if (nums[fast] != nums[slow]) { nums[++slow] = nums[fast]; } } return slow + 1; }复制插入
链表问题
虚拟头节点:简化删除节点等操作,避免处理头节点特殊情况。
快慢指针:用于检测环或找中点。
动态规划
明确状态转移方程,如斐波那契数列用迭代而非递归避免堆栈溢出:
c复制插入
int fib(int n) { if (n < 2) return n; int dp[3] = {0, 1, 1}; for (int i = 2; i <= n; i++) { dp[2] = dp[0] + dp[1]; dp[0] = dp[1]; dp[1] = dp[2]; } return dp[2]; }复制插入