@@ -168,33 +168,36 @@ class Solution {
168168 return - 1 ;
169169 }
170170 int update (Deque<Long > d1 , Map<Long , Integer > m1 , Deque<Long > d2 , Map<Long , Integer > m2 , boolean flag ) {
171- long cur = d1. pollFirst();
172- int step = m1. get(cur);
173- for (int i : nums) {
174- if (flag) {
175- // 正向搜索:进行出队检查,只有出队元素符合条件,才能使用出队元素往下拓展
176- if (0 <= cur && cur <= 1000 ) {
171+ int m = d1. size();
172+ while (m-- > 0 ) {
173+ long cur = d1. pollFirst();
174+ int step = m1. get(cur);
175+ for (int i : nums) {
176+ if (flag) {
177+ // 正向搜索:进行出队检查,只有出队元素符合条件,才能使用出队元素往下拓展
178+ if (0 <= cur && cur <= 1000 ) {
179+ long [] result = new long []{cur + i, cur - i, cur ^ i};
180+ for (long next : result) {
181+ if (m2. containsKey(next)) return step + 1 + m2. get(next);
182+ if (! m1. containsKey(next)) {
183+ d1. addLast(next);
184+ m1. put(next, step + 1 );
185+ }
186+ }
187+ }
188+ } else {
189+ // 反向搜索:进行入队检查,只有拓展元素符合条件,才能将拓展元素入队
177190 long [] result = new long []{cur + i, cur - i, cur ^ i};
178191 for (long next : result) {
179- if (m2. containsKey(next)) return step + 1 + m2. get(next);
180- if (! m1. containsKey(next)) {
181- d1. addLast(next);
182- m1. put(next, step + 1 );
192+ if (0 <= next && next <= 1000 ) {
193+ if (m2. containsKey(next)) return step + 1 + m2. get(next);
194+ if (! m1. containsKey(next)) {
195+ d1. addLast(next);
196+ m1. put(next, step + 1 );
197+ }
183198 }
184199 }
185200 }
186- } else {
187- // 反向搜索:进行入队检查,只有拓展元素符合条件,才能将拓展元素入队
188- long [] result = new long []{cur + i, cur - i, cur ^ i};
189- for (long next : result) {
190- if (0 <= next && next <= 1000 ) {
191- if (m2. containsKey(next)) return step + 1 + m2. get(next);
192- if (! m1. containsKey(next)) {
193- d1. addLast(next);
194- m1. put(next, step + 1 );
195- }
196- }
197- }
198201 }
199202 }
200203 return - 1 ;
0 commit comments