[英]Javascript find max subarray with condition
我当前的代码:
function countDegrees(alpah, degrees) { let maxSoFar = 0; let maxEndingHere = 1; for(let i = 0; i < degrees.length; i++) { for(let j = 1; j < degrees.length; j++) { if(getDistanceBetweenDegrees(degrees[i],degrees[j]) <= alpah) { maxEndingHere++; } } if(maxSoFar < maxEndingHere) { maxSoFar = maxEndingHere; } maxEndingHere = 1; } return maxSoFar; }
目前,它以 O(N^2) 运行,我听说有一种方法可以使它成为 O(N),有什么想法吗?
我能想到的唯一O(n)
方法是使用单个循环并检查当前项目是否在先前使用的项目的“alpah”内:
function countDegrees(maxDiff, degrees) { let count = 0; let current = degrees[0]; for (const num of degrees) { const naiveDiff = Math.abs(num - current); const diff = Math.min(naiveDiff, 360 - naiveDiff); if (diff <= maxDiff) { count++; current = num; } } return count; } console.log(countDegrees(30, [18, 36, 10, 25, 300, 318, 350]))
25 -> 350 不包括在内,因为相差 35,大于 30。
如果您必须考虑不同的可能分支(即不要贪心并取范围内的第一个可用数字),我认为 O(n) 是不可能的,但我可能是错的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.