Skip to content

Commit

Permalink
Merge pull request #824 from 0xff-dev/2958
Browse files Browse the repository at this point in the history
Add solution and test-cases for problem 2958
  • Loading branch information
6boris authored Jun 6, 2024
2 parents d8ca883 + a8279f1 commit 64cb4fd
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 25 deletions.
Original file line number Diff line number Diff line change
@@ -1,28 +1,42 @@
# [2958.Length of Longest Subarray With at Most K Frequency][title]

> [!WARNING|style:flat]
> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm)
## Description
You are given an integer array `nums` and an integer `k`.

The **frequency** of an element `x` is the number of times it occurs in an array.

An array is called **good** if the frequency of each element in this array is **less than or equal** to `k`.

Return the length of the **longest good** subarray of `nums`.

A **subarray** is a contiguous non-empty sequence of elements within an array.

**Example 1:**

```
Input: a = "11", b = "1"
Output: "100"
Input: nums = [1,2,3,1,2,3,1,2], k = 2
Output: 6
Explanation: The longest possible good subarray is [1,2,3,1,2,3] since the values 1, 2, and 3 occur at most twice in this subarray. Note that the subarrays [2,3,1,2,3,1] and [3,1,2,3,1,2] are also good.
It can be shown that there are no good subarrays with length more than 6.
```

## 题意
> ...
**Example 2:**

## 题解

### 思路1
> ...
Length of Longest Subarray With at Most K Frequency
```go
```
Input: nums = [1,2,1,2,1,2,1,2], k = 1
Output: 2
Explanation: The longest possible good subarray is [1,2] since the values 1 and 2 occur at most once in this subarray. Note that the subarray [2,1] is also good.
It can be shown that there are no good subarrays with length more than 2.
```

**Example 3:**

```
Input: nums = [5,5,5,5,5,5,5], k = 4
Output: 4
Explanation: The longest possible good subarray is [5,5,5,5] since the value 5 occurs 4 times in this subarray.
It can be shown that there are no good subarrays with length more than 4.
```

## 结语

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,22 @@
package Solution

func Solution(x bool) bool {
return x
func Solution(nums []int, k int) int {
start, end := 0, 0
ans := 1
length := len(nums)
count := make(map[int]int)
for ; end < length; end++ {
count[nums[end]]++
if count[nums[end]] <= k {
if r := end - start + 1; r > ans {
ans = r
}
continue
}
for count[nums[end]] > k {
start++
count[nums[start-1]]--
}
}
return ans
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,30 +10,31 @@ 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{1, 2, 3, 1, 2, 3, 1, 2}, 2, 6},
{"TestCase2", []int{1, 2, 1, 2, 1, 2, 1, 2}, 1, 2},
{"TestCase3", []int{5, 5, 5, 5, 5, 5, 5}, 4, 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() {
}

0 comments on commit 64cb4fd

Please sign in to comment.