Skip to content

Commit b7760bb

Browse files
refactor 281
1 parent d81efe5 commit b7760bb

File tree

2 files changed

+58
-18
lines changed

2 files changed

+58
-18
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -361,7 +361,7 @@ Your ideas/fixes/algorithms are more than welcome!
361361
|284|[Peeking Iterator](https://leetcode.com/problems/peeking-iterator/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_284.java)| O(n)|O(n) | Medium| Design
362362
|283|[Move Zeroes](https://leetcode.com/problems/move-zeroes/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_283.java)| O(n)|O(1) | Easy|
363363
|282|[Expression Add Operators](https://leetcode.com/problems/expression-add-operators/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_282.java)| O(?)|O(?) | Hard|
364-
|281|[Zigzag Iterator](https://leetcode.com/problems/zigzag-iterator/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_281.java)| O(n)|O(n) | Medium|
364+
|281|[Zigzag Iterator](https://leetcode.com/problems/zigzag-iterator/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_281.java)| O(1)|O(k) | Medium|
365365
|280|[Wiggle Sort](https://leetcode.com/problems/wiggle-sort/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_280.java)| O(n)|O(1) | Medium|
366366
|279|[Perfect Squares](https://leetcode.com/problems/perfect-squares/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_279.java)| O(n)|O(1) | Medium|
367367
|278|[First Bad Version](https://leetcode.com/problems/first-bad-version/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_278.java)| O(logn)|O(1) | Easy| Binary Search
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
package com.fishercoder.solutions;
22

33
import java.util.Iterator;
4+
import java.util.LinkedList;
45
import java.util.List;
6+
import java.util.Queue;
57

68
/**
9+
* 281. Zigzag Iterator
10+
*
711
* Given two 1d vectors, implement an iterator to return their elements alternately.
812
913
For example, given two 1d vectors:
@@ -15,7 +19,8 @@
1519
Follow up: What if you are given k 1d vectors? How well can your code be extended to such cases?
1620
1721
Clarification for the follow up question - Update (2015-09-18):
18-
The "Zigzag" order is not clearly defined and is ambiguous for k > 2 cases. If "Zigzag" does not look right to you, replace "Zigzag" with "Cyclic". For example, given the following input:
22+
The "Zigzag" order is not clearly defined and is ambiguous for k > 2 cases.
23+
If "Zigzag" does not look right to you, replace "Zigzag" with "Cyclic". For example, given the following input:
1924
2025
[1,2,3]
2126
[4,5,6,7]
@@ -24,26 +29,61 @@
2429
*/
2530
public class _281 {
2631

27-
private Iterator<Integer> i;
28-
private Iterator<Integer> j;
29-
private Iterator<Integer> tmp;
32+
public static class Solution1 {
33+
public static class ZigzagIterator {
34+
private Iterator<Integer> i;
35+
private Iterator<Integer> j;
36+
private Iterator<Integer> tmp;
3037

31-
public _281(List<Integer> v1, List<Integer> v2) {
32-
i = v2.iterator();
33-
j = v1.iterator();
34-
}
38+
public ZigzagIterator(List<Integer> v1, List<Integer> v2) {
39+
i = v2.iterator();
40+
j = v1.iterator();
41+
}
42+
43+
public int next() {
44+
if (j.hasNext()) {
45+
tmp = j;
46+
j = i;
47+
i = tmp;
48+
}
49+
return i.next();
50+
}
3551

36-
public int next() {
37-
if (j.hasNext()) {
38-
tmp = j;
39-
j = i;
40-
i = tmp;
52+
public boolean hasNext() {
53+
return i.hasNext() || j.hasNext();
54+
}
4155
}
42-
return i.next();
4356
}
4457

45-
public boolean hasNext() {
46-
return i.hasNext() || j.hasNext();
47-
}
58+
public static class Solution2 {
59+
public static class ZigzagIterator {
60+
61+
Queue<Iterator<Integer>> queue;
4862

63+
public ZigzagIterator(List<Integer> v1, List<Integer> v2) {
64+
queue = new LinkedList<>();
65+
if (v1 != null && !v1.isEmpty()) {
66+
Iterator<Integer> iterator1 = v1.iterator();
67+
queue.offer(iterator1);
68+
}
69+
if (v2 != null && !v2.isEmpty()) {
70+
Iterator<Integer> iterator2 = v2.iterator();
71+
queue.offer(iterator2);
72+
}
73+
}
74+
75+
public boolean hasNext() {
76+
return !queue.isEmpty();
77+
}
78+
79+
public int next() {
80+
Iterator<Integer> iterator = queue.poll();
81+
int next = iterator.next();
82+
if (iterator.hasNext()) {
83+
queue.offer(iterator);
84+
}
85+
return next;
86+
}
87+
}
88+
}
4989
}

0 commit comments

Comments
 (0)