Merge branch 'youngyangyang04:master' into master
This commit is contained in:
@@ -34,6 +34,10 @@
|
||||
* 1 <= K <= 10000
|
||||
* -100 <= A[i] <= 100
|
||||
|
||||
# 视频讲解
|
||||
|
||||
**《代码随想录》算法视频公开课:[贪心算法,这不就是常识?还能叫贪心?LeetCode:1005.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()
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user