package org.example.interview.practice;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
/**
* @author xianzhe.ma
* @date 2021/8/20
*/
public class NC_31_FirstNotRepeatingChar {
public static int FirstNotRepeatingChar(String str) {
TreeMap<Integer, Integer> map = new TreeMap<>();
char[] array = str.toCharArray();
int length = array.length;
Map<Integer, Integer> charMap = new HashMap<>();
for (int i = 0;i<length; i++) {
char ch = array[i];
if (!charMap.containsKey(Integer.valueOf(ch))) {
charMap.put(Integer.valueOf(ch), 1);
} else {
charMap.put(Integer.valueOf(ch), charMap.get(Integer.valueOf(ch)) + 1);
}
map.put(Integer.valueOf(i), Integer.valueOf(ch));
}
Set<Map.Entry<Integer, Integer>> set = map.entrySet();
for (Map.Entry<Integer, Integer> entry : set) {
Integer value = entry.getValue();
if (charMap.get(value) == 1) {
return entry.getKey();
}
}
return -1;
}
}
package org.example.interview.practice;
/**
* @author xianzhe.ma
* @date 2021/7/21
*/
public class NC_32_SQRT {
public int sqrt(int x) {
// write code here
if (x <= 0) {
return 0;
}
int left = 1, right = x;
while (true) {
int middle = (left + right) >> 1;
if (middle <= x / middle && (middle + 1) > x / (middle + 1)) {
return (int) middle;
} else if (middle < x / middle) {
left = middle + 1;
} else {
right = middle - 1;
}
}
}
}
package org.example.interview.practice;
/**
* @author xianzhe.ma
* @date 2021/8/31
*/
public class NC_33_MERGE_LINKLIST {
public ListNode Merge(ListNode list1,ListNode list2) {
ListNode dummy = new ListNode(-1);
ListNode cur = null;
while (list1 != null && list2 != null) {
if (list1.val<list2.val) {
if (cur == null) {
cur = list1;
dummy.next = cur;
} else {
cur.next = list1;
cur = cur.next;
}
list1 = list1.next;
} else {
if (cur == null) {
cur = list2;
dummy.next = cur;
} else {
cur.next = list2;
cur = cur.next;
}
list2 = list2.next;
}
}
if (list1 != null) {
cur.next = list1;
}
if (list2 != null) {
cur.next = list2;
}
return dummy.next;
}
public ListNode Merge2(ListNode list1,ListNode list2) {
if (list1 == null) {
return list2;
}
if (list2 == null) {
return list1;
}
if (list1.val < list2.val) {
list1.next = Merge2(list1.next,list2);
return list1;
} else {
list2.next = Merge2(list1,list2.next);
return list2;
}
}
public static class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
public static void main (String[] args) {
ListNode node1 = new ListNode(1);
ListNode node3 = new ListNode(3);
ListNode node5 = new ListNode(5);
node1.next = node3;
node3.next = node5;
ListNode node2 = new ListNode(2);
ListNode node4 = new ListNode(4);
ListNode node6 = new ListNode(6);
node2.next = node4;
node4.next = node6;
}
}
package org.example.interview.practice;
/**
* @author xianzhe.ma
* @date 2021/11/9
*/
public class NC_34_UNIQUE_PATH {
public static int uniquePaths (int m, int n) {
// write code here
int[][] dp = new int[m][n];
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
// 当 i = 0:dp[0][j] = dp[0][j-1]
if(i == 0){
dp[i][j] = 1; // 都是1是因为dp[0][j] = dp[0][j-1],所以干脆全部赋值为1
continue;
}
// 当 j = 0:dp[i][0] = dp[i-1][0]
if(j == 0){
dp[i][j] = 1;
continue;
}
// 当 i > 1 && j > 1 : dp[i][j] = dp[i][j-1] + dp[i-1][j]
dp[i][j] = dp[i-1][j]+dp[i][j-1];
}
}
return dp[m-1][n-1]; // 返回到达终点的所有可行路径
}
public static int move(int m, int n) {
if (m < 0 || n < 0)
return 0;
if (m == 0 && n == 0) {
return 1;
}
if (m == 1 && n == 0) {
return 1;
}
if (m == 0 && n == 1) {
return 1;
}
return move(m-1,n) + move(m,n-1);
}
public static void main (String[] args) {
System.out.println(uniquePaths(2,1));
}
}