mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-08 00:43:04 +08:00
Merge pull request #1492 from KingArthur0205/master
添加 1049.最后一块石头的重量II.md C语言解法
This commit is contained in:
@ -277,6 +277,37 @@ var lastStoneWeightII = function (stones) {
|
||||
};
|
||||
```
|
||||
|
||||
C版本
|
||||
```c
|
||||
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
|
||||
|
||||
int getSum(int *stones, int stoneSize) {
|
||||
int sum = 0, i;
|
||||
for (i = 0; i < stoneSize; ++i)
|
||||
sum += stones[i];
|
||||
return sum;
|
||||
}
|
||||
|
||||
int lastStoneWeightII(int* stones, int stonesSize){
|
||||
int sum = getSum(stones, stonesSize);
|
||||
int target = sum / 2;
|
||||
int i, j;
|
||||
|
||||
// 初始化dp数组
|
||||
int *dp = (int*)malloc(sizeof(int) * (target + 1));
|
||||
memset(dp, 0, sizeof(int) * (target + 1));
|
||||
for (j = stones[0]; j <= target; ++j)
|
||||
dp[j] = stones[0];
|
||||
|
||||
// 递推公式:dp[j] = max(dp[j], dp[j - stones[i]] + stones[i])
|
||||
for (i = 1; i < stonesSize; ++i) {
|
||||
for (j = target; j >= stones[i]; --j)
|
||||
dp[j] = MAX(dp[j], dp[j - stones[i]] + stones[i]);
|
||||
}
|
||||
return sum - dp[target] - dp[target];
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
TypeScript版本
|
||||
|
||||
|
Reference in New Issue
Block a user