Skip to content

Commit 9c65f8c

Browse files
authored
Merge pull request gahogg#28 from gahogg/Missing-Soln
Added Brute Force Solution
2 parents 8070c46 + 0b04aa2 commit 9c65f8c

File tree

8 files changed

+191
-0
lines changed

8 files changed

+191
-0
lines changed
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
class Solution {
2+
public:
3+
int longestOnes(vector<int>& nums, int k) {
4+
int n = nums.size();
5+
int maxLen = 0;
6+
7+
// Iterate over all starting points of subarrays
8+
for (int i = 0; i < n; ++i) {
9+
10+
// Check each subarray starting from `i`
11+
for (int j = i; j < n; ++j) {
12+
int zeroCount = 0;
13+
for (int c = i; c <= j; ++c) {
14+
if (nums[c] == 0)
15+
zeroCount++;
16+
}
17+
18+
// If the number of zeroes exceeds k,
19+
// update the maximum length
20+
if (zeroCount <= k) {
21+
maxLen = max(maxLen, j - i + 1);
22+
}
23+
24+
}
25+
}
26+
27+
return maxLen;
28+
}
29+
};
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
public class Solution {
2+
public int longestOnes(int[] nums, int k) {
3+
int maxLength = 0;
4+
5+
// Iterate over all starting points
6+
for (int i = 0; i < nums.length; i++) {
7+
8+
// Iterate over all possible subarrays starting from i
9+
for (int j = i; j < nums.length; j++) {
10+
11+
int zeroCount = 0;
12+
for (int c = i; c <= j; ++c) {
13+
if (nums[c] == 0)
14+
++zeroCount;
15+
}
16+
17+
// Update maxLength if this subarray is valid
18+
if (zeroCount <= k) {
19+
maxLength = Math.max(maxLength, j - i + 1);
20+
}
21+
22+
}
23+
}
24+
25+
return maxLength;
26+
}
27+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/**
2+
* @param {number[]} nums
3+
* @param {number} k
4+
* @return {number}
5+
*/
6+
var longestOnes = function(nums, k) {
7+
let maxLength = 0;
8+
9+
// Iterate over all starting points
10+
for (let i = 0; i < nums.length; i++) {
11+
12+
// Iterate over all possible subarrays starting from i
13+
for (let j = i; j < nums.length; j++) {
14+
let zeroCount = 0;
15+
for (let c = i; c <= j; ++c) {
16+
if (nums[c] == 0)
17+
++zeroCount;
18+
}
19+
20+
// If the number of zeroes exceeds k,
21+
// update the maximum length
22+
if (zeroCount <= k) {
23+
maxLength = Math.max(maxLength, j - i + 1);
24+
}
25+
26+
}
27+
}
28+
29+
return maxLength;
30+
};
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
class Solution(object):
2+
def longestOnes(self, nums, k):
3+
"""
4+
:type nums: List[int]
5+
:type k: int
6+
:rtype: int
7+
"""
8+
longest_ones = 0
9+
10+
# Iterate over all starting points
11+
for i in range(len(nums)):
12+
13+
# Iterate over all possible subarrays starting from i
14+
for j in range(i + 1, len(nums) + 1):
15+
window_len = j - i
16+
num_zeros = nums[i:j].count(0) # O(k) operation
17+
if num_zeros <= k:
18+
longest_ones = max(longest_ones, window_len)
19+
return longest_ones
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Solution {
2+
public:
3+
double findMaxAverage(const vector<int>& nums, int k) {
4+
double max_avg = 0;
5+
6+
// setting max_avg to any constant numeric value
7+
// here is incorrect!!!
8+
// So initialize it with some values from the input
9+
for (int i = 0; i < k; ++i)
10+
max_avg += nums[i];
11+
max_avg /= k;
12+
13+
for (int i = 0; i <= nums.size() - k; ++i) {
14+
double avg = 0;
15+
for (int j = i; j < i + k; ++j)
16+
avg += nums[j];
17+
avg /= k;
18+
max_avg = max(max_avg, avg);
19+
}
20+
return max_avg;
21+
}
22+
};
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Solution {
2+
public double findMaxAverage(int[] nums, int k) {
3+
double max_avg = 0;
4+
5+
// setting max_avg to any constant numeric value
6+
// here is incorrect!!!
7+
// So initialize it with some values from the input
8+
for (int i = 0; i < k; ++i)
9+
max_avg += nums[i];
10+
max_avg /= k;
11+
12+
for (int i = 0; i <= nums.length - k; ++i) {
13+
double avg = 0;
14+
for (int j = i; j < i + k; ++j)
15+
avg += nums[j];
16+
avg /= k;
17+
max_avg = Math.max(max_avg, avg);
18+
}
19+
return max_avg;
20+
21+
}
22+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/**
2+
* @param {number[]} nums
3+
* @param {number} k
4+
* @return {number}
5+
*/
6+
var findMaxAverage = function(nums, k) {
7+
const avg = (vals, start, len) => {
8+
let sum = 0;
9+
for (let i = start; i < start + len; i++) {
10+
sum += vals[i];
11+
}
12+
return sum / len;
13+
};
14+
15+
// Calculate initial maximum average
16+
let maxAvg = avg(nums, 0, k);
17+
for (let i = 0; i <= nums.length - k; i++) {
18+
maxAvg = Math.max(maxAvg, avg(nums, i, k));
19+
}
20+
21+
return maxAvg;
22+
};
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
class Solution(object):
2+
def findMaxAverage(self, nums, k):
3+
"""
4+
:type nums: List[int]
5+
:type k: int
6+
:rtype: float
7+
"""
8+
9+
def avg(vals):
10+
return sum(vals) / float(len(vals))
11+
12+
# Note, setting max_avg to any constant numeric value
13+
# here is incorrect!!!
14+
# Say 0, if nums = [-1, -2, -3, -4], k = 2,
15+
# the output would be incorrect
16+
max_avg = avg(nums[:k])
17+
for i in range(len(nums) - k + 1):
18+
max_avg = max(max_avg, avg(nums[i:i+k])) # avg is O(k)
19+
return max_avg
20+

0 commit comments

Comments
 (0)