当数据规模比较大时,用链表法while(node->next->next){ }遍历删除会超时,
考虑数学和动态规划解法(发现dp[n-1]和dp[n]之间的关系,即这个状态和下一个状态之间的关系,这道题目里是数字下标的映射关系,大问题分成下一个小问题解决)。
class Solution {
public:
//参照数据规模,链表解法会超时
int lastRemaining(int n, int m) {
int x=0; //i=1时,即n=1时,不论m和值,最后输出结果都是0
for(int i=2;i<=n;i++){
x=(x+m)%i; //递推公式,根据映射关系,上一个状态推出下一个状态,最后求余的是i
}
return x;
}
};