Having an array of objects, such as numbers, what would be the most optimal (Memory and CPU efficiency) way if finding a sub group of objects?
As an example:
demoArray = [1,2,3,4,5,6,7]
Finding [3,4,5]
would return 2
, while looking for 60
would return -1
. The function must allow for wrapping, so finding [6,7,1,2]
would return 5
I have a current working solution, but I'd like to know if it could be optimized in any way.
var arr = [ 1, 5,2,6,8,2, 3,4,3,10,9, 1,5,7,10,3, 5,6,2,3,8, 9,1] var idx = -1 var group = [] var groupSize = 0 function findIndexOfGroup(g){ group = g groupSize = g.length var beginIndex = -2 while(beginIndex === -2){ beginIndex = get() } return beginIndex } function get(){ idx = arr.indexOf(group[0], idx+1); if(idx === -1 || groupSize === 1){ return idx; } var prevIdx = idx for(var i = 1; i < groupSize; i++){ idx++ if(arr[getIdx(idx)] !== group[i]){ idx = prevIdx break } if(i === groupSize - 1){ return idx - groupSize + 1 } } return -2 } function getIdx(idx){ if(idx >= arr.length){ return idx - arr.length } return idx } console.log(findIndexOfGroup([4,3,10])) // Normal console.log(findIndexOfGroup([9,1,1,5])) // Wrapping