Merge branch 'youngyangyang04:master' into master

This commit is contained in:
sharky7pb
2023-04-18 15:25:28 +08:00
committed by GitHub
175 changed files with 3402 additions and 1357 deletions

View File

@@ -34,6 +34,10 @@
* 1 <= K <= 10000
* -100 <= A[i] <= 100
# 视频讲解
**《代码随想录》算法视频公开课:[贪心算法这不就是常识还能叫贪心LeetCode1005.K次取反后最大化的数组和](https://www.bilibili.com/video/BV138411G7LY),相信结合视频在看本篇题解,更有助于大家对本题的理解**。
## 思路
本题思路其实比较好想了,如何可以让数组和最大呢?
@@ -81,6 +85,10 @@ public:
};
```
* 时间复杂度: O(nlogn)
* 空间复杂度: O(1)
## 总结
贪心的题目如果简单起来,会让人简单到开始怀疑:本来不就应该这么做么?这也算是算法?我认为这不是贪心?
@@ -247,23 +255,18 @@ var largestSumAfterKNegations = function(nums, k) {
```Rust
impl Solution {
pub fn largest_sum_after_k_negations(nums: Vec<i32>, k: i32) -> i32 {
let mut nums = nums;
let mut k = k;
let len = nums.len();
nums.sort_by(|a, b| b.abs().cmp(&a.abs()));
for i in 0..len {
if nums[i] < 0 && k > 0 {
nums[i] *= -1;
pub fn largest_sum_after_k_negations(mut nums: Vec<i32>, mut k: i32) -> i32 {
nums.sort_by_key(|b| std::cmp::Reverse(b.abs()));
for v in nums.iter_mut() {
if *v < 0 && k > 0 {
*v *= -1;
k -= 1;
}
}
if k % 2 == 1 { nums[len - 1] *= -1; }
let mut result = 0;
for num in nums {
result += num;
if k % 2 == 1 {
*nums.last_mut().unwrap() *= -1;
}
result
nums.iter().sum()
}
}
```