感觉最近有些退化了
知识点:模拟
根据题意进行判断即可,史上最简单第一题
1 2 3 4 5 6 7 8 9 10
|
var smallestEqual = function(nums) { for(let i = 0;i < nums.length;i++) { if(nums[i]===i%10) return i } return -1 };
|
知识点:模拟
、链表
解题步骤:
1.找到所有符合条件的点
2.对其坐标进行排序,最大差即排序完第一个与最后一个之差,最小差即数组中相邻坐标之差取最小
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
var nodesBetweenCriticalPoints = function(head) { const pts = [] const ans = [-1,-1] let last = head.val head = head.next let pos = 0 while(head) { pos++ const now = head.val head = head.next if(head) { if(last < now && head.val < now) pts.push(pos) if(last > now && head.val > now) pts.push(pos) } last = now } if(pts.length < 2) return ans pts.sort((a,b)=>a-b) ans[1] = pts[pts.length - 1] - pts[0] ans[0] = pts[1]-pts[0] for(let i = 2;i < pts.length;i++) ans[0] = Math.min(pts[i]-pts[i-1],ans[0]) return ans };
|
知识点:广度优先搜索
好久没有做广度优先搜索,有一些忘了。
按照提议进行搜索即可,一般这种求"最短步骤"的都使用广度搜索即可
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
var minimumOperations = function(nums, start, goal) { let qu = [[start,0]] let vis = [] for(let i = 0;i < 1002;i++) vis.push(false) while(qu.length!==0) { let [now,idx] = qu.shift() if(now >1000 || now < 0) continue for(let i of nums) { if(now+i===goal || now - i === goal || (now ^ i) === goal) return idx+1 if(now+i<= 1000 && now+i >= 0 && !vis[now+i]) { vis[now+i] = true qu.push([now+i,idx+1]) } if(now-i<= 1000 && now-i >= 0 && !vis[now-i]) { vis[now-i] = true qu.push([now-i,idx+1]) } if(now^i<= 1000 && now^i>= 0 && !vis[now^i]) { vis[now^i] = true qu.push([now^i,idx+1]) } } } return -1 };
|
不会做 改天补一下