File tree Expand file tree Collapse file tree
find-minimum-in-rotated-sorted-array Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ /*
2+ // Definition for a Node.
3+ class Node {
4+ public int val;
5+ public List<Node> neighbors;
6+ public Node() {
7+ val = 0;
8+ neighbors = new ArrayList<Node>();
9+ }
10+ public Node(int _val) {
11+ val = _val;
12+ neighbors = new ArrayList<Node>();
13+ }
14+ public Node(int _val, ArrayList<Node> _neighbors) {
15+ val = _val;
16+ neighbors = _neighbors;
17+ }
18+ }
19+ */
20+
21+ class Solution {
22+ public Node cloneGraph (Node node ) {
23+ if (node == null ) return node ;
24+ return deepCopy (node );
25+ }
26+
27+ public Node deepCopy (Node node ) {
28+ Deque <Node > deque = new ArrayDeque <>();
29+ Node root = new Node (node .val , new ArrayList <>());
30+ Map <Integer , Node > visit = new HashMap <>();
31+
32+ visit .put (1 , root );
33+ deque .add (node );
34+
35+ while (!deque .isEmpty ()) {
36+ Node cur = deque .poll ();
37+ for (Node next : cur .neighbors ) {
38+ if (!visit .containsKey (next .val )){
39+ visit .put (next .val , new Node (next .val , new ArrayList <>()));
40+ deque .add (next );
41+ }
42+ visit .get (cur .val ).neighbors .add (visit .get (next .val ));
43+ }
44+ }
45+ return root ;
46+ }
47+ }
48+
49+
Original file line number Diff line number Diff line change 1+ class Solution {
2+ public int findMin (int [] nums ) {
3+ int left = 0 ;
4+ int right = nums .length - 1 ;
5+ int mid = (left + right ) / 2 ;
6+ while (left + 1 < right ){
7+ mid = (left + right ) / 2 ;
8+ if (nums [mid ] > nums [right ]) {
9+ left = mid ;
10+ }
11+ if (nums [mid ] < nums [right ]) {
12+ right = mid ;
13+ }
14+ }
15+ mid = (left + right ) / 2 ;
16+ if (nums [mid ] > nums [right ]) return nums [right ];
17+ else {
18+ return nums [mid ];
19+ }
20+ }
21+ }
22+
23+
Original file line number Diff line number Diff line change 1+ class Solution {
2+ public int maxProduct (int [] nums ) {
3+ int n = nums .length ;
4+ int [] dpMax = new int [n ];
5+ int [] dpMin = new int [n ];
6+
7+ dpMax [0 ] = nums [0 ];
8+ dpMin [0 ] = nums [0 ];
9+ for (int i = 1 ; i < n ; i ++){
10+ dpMax [i ] = Math .max (Math .max (dpMax [i -1 ]*nums [i ], nums [i ]), dpMin [i -1 ]*nums [i ]);
11+ dpMin [i ] = Math .min (Math .min (dpMin [i -1 ]*nums [i ], nums [i ]), dpMax [i -1 ]*nums [i ]);
12+ }
13+ return findMax (dpMax );
14+ }
15+
16+ public int findMax (int [] dp ) {
17+ int answer = dp [0 ];
18+ for (int i = 0 ; i < dp .length ; i ++) {
19+ answer = Math .max (dp [i ], answer );
20+ }
21+ return answer ;
22+ }
23+ }
24+
Original file line number Diff line number Diff line change 1+ /**
2+ * Definition for singly-linked list.
3+ * public class ListNode {
4+ * int val;
5+ * ListNode next;
6+ * ListNode() {}
7+ * ListNode(int val) { this.val = val; }
8+ * ListNode(int val, ListNode next) { this.val = val; this.next = next; }
9+ * }
10+ */
11+ class Solution {
12+ public void reorderList (ListNode head ) {
13+ Map <Integer , ListNode > order = new HashMap <>();
14+ ListNode start = head ;
15+ int n = 0 ;
16+
17+ while (start != null ) {
18+ order .put (n , start );
19+ start = start .next ;
20+ n ++;
21+ }
22+
23+ ListNode cur = head ;
24+ List <Integer > newOrder = generateOrder (n );
25+
26+ for (int i = 0 ; i < n ; i ++) {
27+ int idx = newOrder .get (i );
28+ cur = order .get (idx );
29+ if (i + 1 < n ) {
30+ cur .next = order .get (newOrder .get (i +1 ));
31+ } else {
32+ cur .next = null ;
33+ }
34+ cur = cur .next ;
35+ }
36+ }
37+ public List <Integer > generateOrder (int n ) {
38+ List <Integer > reorder = new ArrayList <>();
39+ int [] asc = new int [n ];
40+ int [] desc = new int [n ];
41+
42+ for (int i = 0 ; i < n ; i ++) {
43+ asc [i ] = i ;
44+ desc [i ] = n - 1 - i ;
45+ }
46+
47+ for (int i = 0 ; i < n ; i ++) {
48+ if (i % 2 == 0 ) {
49+ reorder .add (asc [i /2 ]);
50+ } else {
51+ reorder .add (desc [i /2 ]);
52+ }
53+ }
54+ return reorder ;
55+ }
56+ }
57+
Original file line number Diff line number Diff line change 1+ class Solution {
2+ public boolean wordBreak (String s , List <String > wordDict ) {
3+ Set <String > wordSet = new HashSet <>(wordDict );
4+ int n = s .length ();
5+ boolean [] dp = new boolean [n ];
6+ for (int i = 0 ; i < n ; i ++) {
7+ dp [i ] = wordSet .contains (s .substring (0 , i +1 ));
8+ for (int j = 0 ; j < i ; j ++) {
9+ if (dp [j ] && wordSet .contains (s .substring (j +1 , i +1 ))){
10+ dp [i ] = true ;
11+ }
12+ }
13+ }
14+
15+ return dp [n -1 ];
16+ }
17+ }
18+
19+
You can’t perform that action at this time.
0 commit comments