diff --git a/leetcode/2701-2800/2779.Maximum-Beauty-of-an-Array-After-Applying-Operation/README.md b/leetcode/2701-2800/2779.Maximum-Beauty-of-an-Array-After-Applying-Operation/README.md new file mode 100644 index 000000000..c037d621e --- /dev/null +++ b/leetcode/2701-2800/2779.Maximum-Beauty-of-an-Array-After-Applying-Operation/README.md @@ -0,0 +1,45 @@ +# [2779.Maximum Beauty of an Array After Applying Operation][title] + +## Description +You are given a **0-indexed** array nums and a **non-negative** integer `k`. + +In one operation, you can do the following: + +- Choose an index `i` that **hasn't been chosen before** from the range `[0, nums.length - 1]`. +- Replace `nums[i]` with any integer from the range `[nums[i] - k, nums[i] + k]`. + +The **beauty** of the array is the length of the longest subsequence consisting of equal elements. + +Return the **maximum** possible beauty of the array `nums` after applying the operation any number of times. + +**Note** that you can apply the operation to each index **only once**. + +A **subsequence** of an array is a new array generated from the original array by deleting some elements (possibly none) without changing the order of the remaining elements. + +**Example 1:** + +``` +Input: nums = [4,6,1,2], k = 2 +Output: 3 +Explanation: In this example, we apply the following operations: +- Choose index 1, replace it with 4 (from range [4,8]), nums = [4,4,1,2]. +- Choose index 3, replace it with 4 (from range [0,4]), nums = [4,4,1,4]. +After the applied operations, the beauty of the array nums is 3 (subsequence consisting of indices 0, 1, and 3). +It can be proven that 3 is the maximum possible length we can achieve. +``` + +**Example 2:** + +``` +Input: nums = [1,1,1,1], k = 10 +Output: 4 +Explanation: In this example we don't have to apply any operations. +The beauty of the array nums is 4 (whole array). +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-beauty-of-an-array-after-applying-operation +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2701-2800/2779.Maximum-Beauty-of-an-Array-After-Applying-Operation/Solution.go b/leetcode/2701-2800/2779.Maximum-Beauty-of-an-Array-After-Applying-Operation/Solution.go index d115ccf5e..7f2639807 100755 --- a/leetcode/2701-2800/2779.Maximum-Beauty-of-an-Array-After-Applying-Operation/Solution.go +++ b/leetcode/2701-2800/2779.Maximum-Beauty-of-an-Array-After-Applying-Operation/Solution.go @@ -1,5 +1,39 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(nums []int, k int) int { + sort.Ints(nums) + ans := 0 + start, end := 0, 0 + // 排序以后,能够出现交集的情况就是 + // 最小的元素定义了右边界 + // 最大的元素定义了左边界 + // re 就是交集的右边界 + re := nums[0] + k + + for ; end < len(nums); end++ { + // 还在同一个范围 + s := nums[end] - k + if s <= re { + // 还有可以增加de + continue + } + diff := end - start + ans = max(ans, diff) + + // 开始减少左侧的数据 + // 尝试移除start + start++ + for ; start <= end; start++ { + re = nums[start] + k + if s <= re { + break + } + } + } + diff := end - start + ans = max(ans, diff) + + return ans } diff --git a/leetcode/2701-2800/2779.Maximum-Beauty-of-an-Array-After-Applying-Operation/Solution_test.go b/leetcode/2701-2800/2779.Maximum-Beauty-of-an-Array-After-Applying-Operation/Solution_test.go index 14ff50eb4..55bf92b8a 100755 --- a/leetcode/2701-2800/2779.Maximum-Beauty-of-an-Array-After-Applying-Operation/Solution_test.go +++ b/leetcode/2701-2800/2779.Maximum-Beauty-of-an-Array-After-Applying-Operation/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + nums []int + k int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{4, 6, 1, 2}, 2, 3}, + {"TestCase2", []int{1, 1, 1, 1}, 10, 4}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.nums, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.nums, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { }