mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-07 15:45:40 +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版本
|
TypeScript版本
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user