Skip to content

Commit 544e7b2

Browse files
authored
Merge branch 'master' into thombergs-patch-4
2 parents 6c60462 + 5a4ac62 commit 544e7b2

File tree

187 files changed

+2600
-254
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

187 files changed

+2600
-254
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ Java and Spring Tutorials
1414
================
1515

1616
This project is **a collection of small and focused tutorials** - each covering a single and well defined area of development in the Java ecosystem.
17-
A strong focus of these is, of course, the Spring Framework - Spring, Spring Boot and Spring Securiyt.
17+
A strong focus of these is, of course, the Spring Framework - Spring, Spring Boot and Spring Security.
1818
In additional to Spring, the following technologies are in focus: `core Java`, `Jackson`, `HttpClient`, `Guava`.
1919

2020

akka-http/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
### Relevant articles
1+
## Relevant articles:
22

33
- [Introduction to Akka HTTP](https://www.baeldung.com/akka-http)

algorithms-miscellaneous-1/README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,5 @@
1212
- [Check If a String Contains All The Letters of The Alphabet](https://www.baeldung.com/java-string-contains-all-letters)
1313
- [Find the Middle Element of a Linked List](http://www.baeldung.com/java-linked-list-middle-element)
1414
- [Calculate Factorial in Java](https://www.baeldung.com/java-calculate-factorial)
15-
- [Find Substrings That Are Palindromes in Java](https://www.baeldung.com/java-palindrome-substrings)
15+
- [Find Substrings That Are Palindromes in Java](https://www.baeldung.com/java-palindrome-substrings)
16+
- [Find the Longest Substring without Repeating Characters](https://www.baeldung.com/java-longest-substring-without-repeated-characters)
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
package com.baeldung.algorithms.permutation;
2+
3+
import java.util.Arrays;
4+
import java.util.Collections;
5+
6+
public class Permutation {
7+
8+
public static <T> void printAllRecursive(T[] elements, char delimiter) {
9+
printAllRecursive(elements.length, elements, delimiter);
10+
}
11+
12+
public static <T> void printAllRecursive(int n, T[] elements, char delimiter) {
13+
14+
if(n == 1) {
15+
printArray(elements, delimiter);
16+
} else {
17+
for(int i = 0; i < n-1; i++) {
18+
printAllRecursive(n - 1, elements, delimiter);
19+
if(n % 2 == 0) {
20+
swap(elements, i, n-1);
21+
} else {
22+
swap(elements, 0, n-1);
23+
}
24+
}
25+
printAllRecursive(n - 1, elements, delimiter);
26+
}
27+
}
28+
29+
public static <T> void printAllIterative(int n, T[] elements, char delimiter) {
30+
31+
int[] indexes = new int[n];
32+
for (int i = 0; i < n; i++) {
33+
indexes[i] = 0;
34+
}
35+
36+
printArray(elements, delimiter);
37+
38+
int i = 0;
39+
while (i < n) {
40+
if (indexes[i] < i) {
41+
swap(elements, i % 2 == 0 ? 0: indexes[i], i);
42+
printArray(elements, delimiter);
43+
indexes[i]++;
44+
i = 0;
45+
}
46+
else {
47+
indexes[i] = 0;
48+
i++;
49+
}
50+
}
51+
}
52+
53+
public static <T extends Comparable<T>> void printAllOrdered(T[] elements, char delimiter) {
54+
55+
Arrays.sort(elements);
56+
boolean hasNext = true;
57+
58+
while(hasNext) {
59+
printArray(elements, delimiter);
60+
int k = 0, l = 0;
61+
hasNext = false;
62+
for (int i = elements.length - 1; i > 0; i--) {
63+
if (elements[i].compareTo(elements[i - 1]) > 0) {
64+
k = i - 1;
65+
hasNext = true;
66+
break;
67+
}
68+
}
69+
70+
for (int i = elements.length - 1; i > k; i--) {
71+
if (elements[i].compareTo(elements[k]) > 0) {
72+
l = i;
73+
break;
74+
}
75+
}
76+
77+
swap(elements, k, l);
78+
Collections.reverse(Arrays.asList(elements).subList(k + 1, elements.length));
79+
}
80+
}
81+
82+
public static <T> void printRandom(T[] elements, char delimiter) {
83+
84+
Collections.shuffle(Arrays.asList(elements));
85+
printArray(elements, delimiter);
86+
}
87+
88+
private static <T> void swap(T[] elements, int a, int b) {
89+
90+
T tmp = elements[a];
91+
elements[a] = elements[b];
92+
elements[b] = tmp;
93+
}
94+
95+
private static <T> void printArray(T[] elements, char delimiter) {
96+
97+
String delimiterSpace = delimiter + " ";
98+
for(int i = 0; i < elements.length; i++) {
99+
System.out.print(elements[i] + delimiterSpace);
100+
}
101+
System.out.print('\n');
102+
}
103+
104+
public static void main(String[] argv) {
105+
106+
Integer[] elements = {1,2,3,4};
107+
108+
System.out.println("Rec:");
109+
printAllRecursive(elements, ';');
110+
111+
System.out.println("Iter:");
112+
printAllIterative(elements.length, elements, ';');
113+
114+
System.out.println("Orderes:");
115+
printAllOrdered(elements, ';');
116+
117+
System.out.println("Random:");
118+
printRandom(elements, ';');
119+
120+
System.out.println("Random:");
121+
printRandom(elements, ';');
122+
}
123+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.baeldung.algorithms.twopointertechnique;
2+
3+
public class LinkedListFindMiddle {
4+
5+
public <T> T findMiddle(MyNode<T> head) {
6+
MyNode<T> slowPointer = head;
7+
MyNode<T> fastPointer = head;
8+
9+
while (fastPointer.next != null && fastPointer.next.next != null) {
10+
fastPointer = fastPointer.next.next;
11+
slowPointer = slowPointer.next;
12+
}
13+
return slowPointer.data;
14+
}
15+
16+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.baeldung.algorithms.twopointertechnique;
2+
3+
public class MyNode<E> {
4+
MyNode<E> next;
5+
E data;
6+
7+
public MyNode(E value) {
8+
data = value;
9+
next = null;
10+
}
11+
12+
public MyNode(E value, MyNode<E> n) {
13+
data = value;
14+
next = n;
15+
}
16+
17+
public void setNext(MyNode<E> n) {
18+
next = n;
19+
}
20+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.baeldung.algorithms.twopointertechnique;
2+
3+
public class RotateArray {
4+
5+
public void rotate(int[] input, int step) {
6+
step %= input.length;
7+
reverse(input, 0, input.length - 1);
8+
reverse(input, 0, step - 1);
9+
reverse(input, step, input.length - 1);
10+
}
11+
12+
private void reverse(int[] input, int start, int end) {
13+
while (start < end) {
14+
int temp = input[start];
15+
input[start] = input[end];
16+
input[end] = temp;
17+
start++;
18+
end--;
19+
}
20+
}
21+
22+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.baeldung.algorithms.twopointertechnique;
2+
3+
public class TwoSum {
4+
5+
public boolean twoSum(int[] input, int targetValue) {
6+
7+
int pointerOne = 0;
8+
int pointerTwo = input.length - 1;
9+
10+
while (pointerOne < pointerTwo) {
11+
int sum = input[pointerOne] + input[pointerTwo];
12+
13+
if (sum == targetValue) {
14+
return true;
15+
} else if (sum < targetValue) {
16+
pointerOne++;
17+
} else {
18+
pointerTwo--;
19+
}
20+
}
21+
22+
return false;
23+
}
24+
25+
public boolean twoSumSlow(int[] input, int targetValue) {
26+
27+
for (int i = 0; i < input.length; i++) {
28+
for (int j = 1; j < input.length; j++) {
29+
if (input[i] + input[j] == targetValue) {
30+
return true;
31+
}
32+
}
33+
}
34+
35+
return false;
36+
}
37+
38+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.baeldung.algorithms.twopointertechnique;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
5+
import org.junit.Test;
6+
7+
public class LinkedListFindMiddleUnitTest {
8+
9+
LinkedListFindMiddle linkedListFindMiddle = new LinkedListFindMiddle();
10+
11+
@Test
12+
public void givenLinkedListOfMyNodes_whenLinkedListFindMiddle_thenCorrect() {
13+
14+
MyNode<String> head = createNodesList(8);
15+
16+
assertThat(linkedListFindMiddle.findMiddle(head)).isEqualTo("4");
17+
18+
head = createNodesList(9);
19+
20+
assertThat(linkedListFindMiddle.findMiddle(head)).isEqualTo("5");
21+
}
22+
23+
private static MyNode<String> createNodesList(int n) {
24+
25+
MyNode<String> head = new MyNode<String>("1");
26+
MyNode<String> current = head;
27+
28+
for (int i = 2; i <= n; i++) {
29+
MyNode<String> newNode = new MyNode<String>(String.valueOf(i));
30+
current.setNext(newNode);
31+
current = newNode;
32+
}
33+
34+
return head;
35+
}
36+
37+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package com.baeldung.algorithms.twopointertechnique;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
5+
import org.junit.Test;
6+
7+
public class RotateArrayUnitTest {
8+
9+
private RotateArray rotateArray = new RotateArray();
10+
11+
private int[] inputArray;
12+
13+
private int step;
14+
15+
@Test
16+
public void givenAnArrayOfIntegers_whenRotateKsteps_thenCorrect() {
17+
18+
inputArray = new int[] { 1, 2, 3, 4, 5, 6, 7 };
19+
step = 4;
20+
21+
rotateArray.rotate(inputArray, step);
22+
23+
assertThat(inputArray).containsExactly(new int[] { 4, 5, 6, 7, 1, 2, 3 });
24+
}
25+
26+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package com.baeldung.algorithms.twopointertechnique;
2+
3+
import static org.junit.Assert.assertFalse;
4+
import static org.junit.Assert.assertTrue;
5+
6+
import org.junit.Test;
7+
8+
public class TwoSumUnitTest {
9+
10+
private TwoSum twoSum = new TwoSum();
11+
12+
private int[] sortedArray;
13+
14+
private int targetValue;
15+
16+
@Test
17+
public void givenASortedArrayOfIntegers_whenTwoSumSlow_thenPairExists() {
18+
19+
sortedArray = new int[] { 0, 1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 9 };
20+
21+
targetValue = 12;
22+
23+
assertTrue(twoSum.twoSumSlow(sortedArray, targetValue));
24+
}
25+
26+
@Test
27+
public void givenASortedArrayOfIntegers_whenTwoSumSlow_thenPairDoesNotExists() {
28+
29+
sortedArray = new int[] { 0, 1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 9 };
30+
31+
targetValue = 20;
32+
33+
assertFalse(twoSum.twoSumSlow(sortedArray, targetValue));
34+
}
35+
36+
@Test
37+
public void givenASortedArrayOfIntegers_whenTwoSum_thenPairExists() {
38+
39+
sortedArray = new int[] { 0, 1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 9 };
40+
41+
targetValue = 12;
42+
43+
assertTrue(twoSum.twoSum(sortedArray, targetValue));
44+
}
45+
46+
@Test
47+
public void givenASortedArrayOfIntegers_whenTwoSum_thenPairDoesNotExists() {
48+
49+
sortedArray = new int[] { 0, 1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 9 };
50+
51+
targetValue = 20;
52+
53+
assertFalse(twoSum.twoSum(sortedArray, targetValue));
54+
}
55+
56+
}

0 commit comments

Comments
 (0)