classSolution(object): defmaximumPopulation(self, logs): res,year = 0,1950 for i in range(1950,2051): temp = 0 for per in logs: if i >= per[0] and i< per[1]: temp +=1 if temp > res: res = temp year = i return year
方法二: 查分数组
bore-died区间的计数加一,可以使用差分数组做区间修改。
时间复杂度 O(n)
空间复杂度 O(D)
1 2 3 4 5 6 7 8 9 10 11 12 13
funcmaximumPopulation(logs [][]int)int { arr := make([]int,101) for _,per := range logs { arr[per[0]-1950]+=1 arr[per[1]-1950]-=1 } res := arr[0] for i:=1;i<len(arr);i++ { arr[i] += arr[i-1] res = max(res,arr[i]) } return res }
classSolution(object): defmaxDistance(self, nums1, nums2): n,m = len(nums1),len(nums2) i,j = 0,0 res = 0 while i<n and j<m: if nums1[i] <= nums2[j]: while j<m and nums1[i]<=nums2[j]: j+=1 res = max(res,j-i-1) elif nums1[i] > nums2[j]: i+=1 return res
classSolution{ int MOD = 1000000000 + 7; publicintmaxSumMinProduct(int[] nums){ int n = nums.length; int[] sum = newint[n+1]; for(int i=1;i<=n;i++) { sum[i] = sum[i-1]+ nums[i-1]; }
Deque<Integer> stack = new LinkedList<>(); int[] l = newint[n],r = newint[n]; Arrays.fill(r,n-1);
for(int i=0;i<n;i++){ while (!stack.isEmpty() && nums[stack.peekLast()] > nums[i]) { Integer top = stack.pollLast(); r[top] = i-1; } stack.offerLast(i); }
for(int i=n-1;i>=0;i--){ while (!stack.isEmpty() && nums[stack.peekLast()] > nums[i]) { Integer top = stack.pollLast(); l[top] = i+1; } stack.offerLast(i); }
Double res = 0D; for(int i=0;i<n;i++) { res = Math.max(res,nums[i]*(sum[r[i]+1]-sum[l[i]])); } return (int) (res%MOD); } }
classSolution(object): deflargestPathValue(self, colors, edges): mm,n = {},len(colors) inDegree = [0]*n for a,b in edges: inDegree[b]+=1 if a notin edges: mm[a] = set() mm[a].add(b) q = Queue(maxsize=0) for i in range(n): if inDegree[i]==0: q.put(i) tp = [] while len(q)>0: top = q.get() tp.append(top) for v in mm[top]: inDegree[v]-=1 if inDegree[v]==0: tp.append(v) if len(tp)!=n : return-1
res = 0 for color in range(26): dp = [0]*n for i in range(n-1,-1,-1): u = tp[i] for v in mm[u]: dp[u] = max(dp[u],dp[v]) if (ord(colors[u])-ord('a')==color): dp[u]+=1 res = max(res,dp[u]) return res