Skip to content

Commit c6762b2

Browse files
committed
some easy questions
1 parent 7483895 commit c6762b2

File tree

4 files changed

+222
-0
lines changed

4 files changed

+222
-0
lines changed
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package problems.leetcode;
2+
3+
// https://leetcode.com/problems/find-the-winner-of-the-circular-game/
4+
public class FindTheWinnerOfTheCircularGame {
5+
6+
7+
// 0, 1, 2, 3, 4, 5
8+
// 1, 2, 3, 4, 5, 6
9+
10+
// n = 6, k = 3
11+
// 1, 2, 3, 4, 5, 6
12+
// 1, 2, -, 4, 5, 6
13+
// 1, 2, -, 4, 5, -
14+
// 1, 2, -, -, 5, -
15+
// 1, -, -, -, 5, -
16+
// 1, -, -, -, -, -
17+
//
18+
// n = 6, k = 4
19+
// 1, 2, 3, 4, 5, 6
20+
// 1, 2, 3, -, 5, 6
21+
// 1, -, 3, -, 5, 6
22+
// -, -, 3, -, 5, 6
23+
// -, -, -, -, 5, 6
24+
// -, -, -, -, 5, -
25+
//
26+
// n = 7, k = 2
27+
// 1, 2, 3, 4, 5, 6, 7
28+
// 1, -, 3, 4, 5, 6, 7
29+
// 1, -, 3, -, 5, 6, 7
30+
// 1, -, 3, -, 6, -, 7
31+
// -, -, 3, -, 6, -, 7
32+
// -, -, 3, -, -, -, 7
33+
// -, -, -, -, -, -, 7
34+
35+
public static int findTheWinner(int n, int k) {
36+
int[] players = new int[n];
37+
for (int i = 0; i < n; i++) {
38+
players[i] = i + 1;
39+
}
40+
41+
int current = 0;
42+
for (int remaining = n - 1; remaining > 0; remaining--) {
43+
for (int move = k; move > 0;) {
44+
if (players[current++] != 0) {
45+
move--;
46+
}
47+
if (current == n) {
48+
current = 0;
49+
}
50+
}
51+
players[((current - 1) + n) % n] = 0;
52+
}
53+
54+
for (int i = 0; i < n; i++) {
55+
if (players[i] != 0) {
56+
return players[i];
57+
}
58+
}
59+
60+
return -1;
61+
}
62+
63+
public static void main(String[] args) {
64+
System.out.println(findTheWinner(5, 2));
65+
System.out.println(findTheWinner(6, 3));
66+
System.out.println(findTheWinner(6, 4));
67+
System.out.println(findTheWinner(7, 2));
68+
}
69+
70+
}

src/problems/leetcode/HeapSort.java

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package problems.leetcode;
2+
3+
import java.util.Arrays;
4+
5+
public class HeapSort {
6+
7+
/**
8+
* runtime: O(NlgN)
9+
* space: O(1)
10+
*
11+
* HEAPSORT(A)
12+
* BUILD-MAX-HEAP(A)
13+
* for i = A.length..2
14+
* exch A[1], A[i]
15+
* A.heap-size--
16+
* MAX-HEAPIFY(A, 1)
17+
*/
18+
public static void sort(int[] vals) {
19+
maxHeapify(vals, vals.length);
20+
21+
for (int size = vals.length, i = size - 1; i >= 1; i--) {
22+
swap(vals, 0, i);
23+
maxHeapify(vals, --size, 0);
24+
}
25+
26+
System.out.println(Arrays.toString(vals));
27+
}
28+
29+
private static void maxHeapify(int[] heap, int size) {
30+
// heap[size/2..1] are leaves, which are heap themselves.
31+
for (int i = size / 2; i >= 0; i--) {
32+
maxHeapify(heap, size, i);
33+
}
34+
}
35+
36+
private static void maxHeapify(int[] heap, int size, int i) {
37+
int l = leftChild(i);
38+
int r = rightChild(i);
39+
int largest = i;
40+
if (l < size && heap[l] > heap[i]) {
41+
largest = l;
42+
}
43+
if (r < size && heap[r] > heap[largest]) {
44+
largest = r;
45+
}
46+
if (largest != i) {
47+
swap(heap, i, largest);
48+
maxHeapify(heap, size, largest);
49+
}
50+
}
51+
52+
private static int leftChild(int i) {
53+
return (i + 1) * 2 - 1;
54+
}
55+
56+
private static int rightChild(int i) {
57+
return (i + 1) * 2;
58+
}
59+
60+
private static void swap(int[] heap, int l, int r) {
61+
int tmp;
62+
tmp = heap[l];
63+
heap[l] = heap[r];
64+
heap[r] = tmp;
65+
}
66+
67+
public static void main(String[] args) {
68+
sort(new int[] { 1, 2, 3, 4, 5 });
69+
sort(new int[] { 5, 4, 3, 2, 1 });
70+
sort(new int[] { 1, 2, 3, 4, 5, 4, 3, 2, 1 });
71+
}
72+
73+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package problems.leetcode;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
// https://leetcode.com/problems/palindrome-number/
7+
public class PalindromeNumber {
8+
9+
public static boolean isPalindrome(int x) {
10+
if (x < 0) {
11+
return false;
12+
}
13+
14+
List<Integer> digits = new ArrayList<>(10);
15+
int j = 0;
16+
for (int i = 1, k = 0;i <= 1_000_000_000; i *= 10, k++) {
17+
long d = i;
18+
int digit = (int) ((((long) x) % (d * 10)) / d);
19+
digits.add(digit);
20+
if (digit > 0) {
21+
j = k;
22+
}
23+
}
24+
25+
// System.out.println(digits);
26+
int i = 0;
27+
while (i < j) {
28+
if (digits.get(i) != digits.get(j)) {
29+
return false;
30+
}
31+
i++;
32+
j--;
33+
}
34+
35+
return true;
36+
}
37+
38+
public static void main(String[] args) {
39+
System.out.println(isPalindrome(121));
40+
System.out.println(isPalindrome(4325));
41+
System.out.println(isPalindrome(43234));
42+
System.out.println(isPalindrome(1111111111));
43+
System.out.println(isPalindrome(1410110141));
44+
}
45+
46+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package problems.leetcode;
2+
3+
import java.util.AbstractList;
4+
import java.util.Arrays;
5+
import java.util.Collections;
6+
import java.util.Comparator;
7+
import java.util.List;
8+
9+
// https://leetcode.com/problems/remove-element/
10+
public class RemoveElement {
11+
12+
public static void main(String[] args) {
13+
int[] nums = new int[] {3,2,5,2,3};
14+
System.out.println(removeElement(nums, 2));
15+
}
16+
17+
public static int removeElement(int[] nums, int val) {
18+
int i = 0;
19+
for (int j = 0; j < nums.length; j++) {
20+
if (nums[j] != val) {
21+
int temp = nums[i];
22+
nums[i] = nums[j];
23+
nums[j] = temp;
24+
i++;
25+
}
26+
}
27+
28+
System.out.println(Arrays.toString(nums));
29+
30+
return i;
31+
}
32+
33+
}

0 commit comments

Comments
 (0)