@@ -60,22 +60,116 @@ Positions 0, 1, 2, and 4 meet the requirement so we return 4.
60
60
61
61
<!-- 这里可写通用的实现逻辑 -->
62
62
63
+ ** 方法一:差分数组**
64
+
65
+ 时间复杂度 O(n)。
66
+
63
67
<!-- tabs:start -->
64
68
65
69
### ** Python3**
66
70
67
71
<!-- 这里可写当前语言的特殊实现逻辑 -->
68
72
69
73
``` python
70
-
74
+ class Solution :
75
+ def meetRequirement (self , n : int , lights : List[List[int ]], requirement : List[int ]) -> int :
76
+ d = [0 ] * 100010
77
+ for p, r in lights:
78
+ i, j = max (0 , p - r), min (n - 1 , p + r)
79
+ d[i] += 1
80
+ d[j + 1 ] -= 1
81
+ s = ans = 0
82
+ for i, r in enumerate (requirement):
83
+ s += d[i]
84
+ if s >= r:
85
+ ans += 1
86
+ return ans
71
87
```
72
88
73
89
### ** Java**
74
90
75
91
<!-- 这里可写当前语言的特殊实现逻辑 -->
76
92
77
93
``` java
94
+ class Solution {
95
+ public int meetRequirement (int n , int [][] lights , int [] requirement ) {
96
+ int [] d = new int [100010 ];
97
+ for (int [] e : lights) {
98
+ int i = Math . max(0 , e[0 ] - e[1 ]);
99
+ int j = Math . min(n - 1 , e[0 ] + e[1 ]);
100
+ ++ d[i];
101
+ -- d[j + 1 ];
102
+ }
103
+ int s = 0 ;
104
+ int ans = 0 ;
105
+ for (int i = 0 ; i < n; ++ i) {
106
+ s += d[i];
107
+ if (s >= requirement[i]) {
108
+ ++ ans;
109
+ }
110
+ }
111
+ return ans;
112
+ }
113
+ }
114
+ ```
115
+
116
+ ### ** C++**
117
+
118
+ ``` cpp
119
+ class Solution {
120
+ public:
121
+ int meetRequirement(int n, vector<vector<int >>& lights, vector<int >& requirement) {
122
+ vector<int > d(100010);
123
+ for (auto& e : lights)
124
+ {
125
+ int i = max(0, e[ 0] - e[ 1] ), j = min(n - 1, e[ 0] + e[ 1] );
126
+ ++d[ i] ;
127
+ --d[ j + 1] ;
128
+ }
129
+ int s = 0, ans = 0;
130
+ for (int i = 0; i < n; ++i)
131
+ {
132
+ s += d[ i] ;
133
+ if (s >= requirement[ i] ) ++ans;
134
+ }
135
+ return ans;
136
+ }
137
+ };
138
+ ```
78
139
140
+ ### **Go**
141
+
142
+ ```go
143
+ func meetRequirement(n int, lights [][]int, requirement []int) int {
144
+ d := make([]int, 100010)
145
+ for _, e := range lights {
146
+ i, j := max(0, e[0]-e[1]), min(n-1, e[0]+e[1])
147
+ d[i]++
148
+ d[j+1]--
149
+ }
150
+ var s, ans int
151
+ for i, r := range requirement {
152
+ s += d[i]
153
+ if s >= r {
154
+ ans++
155
+ }
156
+ }
157
+ return ans
158
+ }
159
+
160
+ func max(a, b int) int {
161
+ if a > b {
162
+ return a
163
+ }
164
+ return b
165
+ }
166
+
167
+ func min(a, b int) int {
168
+ if a < b {
169
+ return a
170
+ }
171
+ return b
172
+ }
79
173
```
80
174
81
175
### ** TypeScript**
0 commit comments