dp来解,subproblem是:diff[i]: number of paints when current i is different from i - 1, same[i]: number of paints when current i is same as i-1所以dp方程为:diff[i] = diff[i-1] * (k-1) + same[i-1] * (k-1),same[i] = diff[i-1],滚动数组优化
又是一道dp的题,关键是找subproblem。dp[i][j]表示最少的money you need to guarantee a win,当范围是(i+1, j+1)的时候。所以要求dp[i][j]就应该遍历切分点找出最小的值,这个切分点可能把问题分成左边或者右边,要取最大值才能保证所有的值都能赢。所以dp[i][j] = min(k+1 + max(dp[i][k-1], dp[k+1][j]))注意base ca...
和Design Hit Counter基本一样,都可以用hashmap,但是timestamp大了之后会有很多无效的时间保存在hashmap里面,要remove的话,可能需要遍历hashmap或者用list辅助,时间复杂度超过O(1),所以用一个rotate array来做,每次根据新的timestamp改变array。
这道题和numbers of islands II 是一个思路,一个count初始化为n,union find每次有新的edge就union两个节点,如果两个节点(u, v)原来不在一个连通图里面就减少count并且连起来,如果原来就在一个图里面就不管。用一个索引array来做,union find优化就是加权了,每次把大的树的root当做parent,小的树的root作为child。