package org.example.interview.practice;
import java.util.ArrayList;
import java.util.List;
/**
* @author xianzhe.ma
* @date 2021/8/23
*/
public class NC_26_GenerateParenthesis {
public static ArrayList<String> generateParenthesis (int n) {
// write code here
ArrayList<String> result = new ArrayList<>(10);
backtrack("", 0, 0, n, result);
return result;
}
private static void backtrack(String string, int open, int close, int n, List<String> result) {
if (string.length() == n << 1) {
result.add(string);
return;
}
if (open < n) {
backtrack(string+"(", open+1, close, n, result);
}
if (close < open) {
backtrack(string+")", open, close+1, n, result);
}
}
public static void main (String[] args) {
generateParenthesis(3);
}
}
package org.example.interview.practice;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author xianzhe.ma
* @date 2021/8/23
*/
public class NC_27_ALL_SUBARRAY {
private static ArrayList<ArrayList<Integer>> result = new ArrayList<>();
public ArrayList<ArrayList<Integer>> subsets(int[] S) {
if (S == null || S.length == 0) {
result.add(new ArrayList<>());
return result;
}
result.add(new ArrayList<>());
int length = S.length;
List<Integer> inputList = Arrays.stream(S).boxed().collect(Collectors.toList());
for (int i = 1; i < length; i++) {
combine(inputList, 0, i, new LinkedList<>());
}
result.add((ArrayList<Integer>) inputList);
return result;
}
public static void combine(List<Integer> input, int start, int length, LinkedList<Integer> tempList) {
if (length == 0) {
ArrayList<Integer> list = new ArrayList<>();
for (Integer num : tempList) {
list.add(num);
}
result.add(list);
return;
}
if (start == input.size()) {
return;
}
tempList.add(input.get(start));
combine(input, start + 1, length - 1, tempList);
tempList.removeLast();
combine(input, start + 1, length, tempList);
}
}
package org.example.interview.practice;
/**
* @author xianzhe.ma
* @date 2021/8/15
*/
public class NC_28_Min_Window {
public static String minWindow (String s, String t) {
// write code here
if (s == null || s == "" || t == null || t == "" || s.length() < t.length()) {
return "";
}
//用来统计t中每个字符出现次数
int[] needs = new int[128];
//用来统计滑动窗口中每个字符出现次数
int[] window = new int[128];
for (int i = 0; i < t.length(); i++) {
needs[t.charAt(i)]++;
}
int left = 0;
int right = 0;
String res = "";
//目前有多少个字符
int count = 0;
//用来记录最短需要多少个字符。
int minLength = s.length() + 1;
while (right < s.length()) {
char ch = s.charAt(right);
window[ch]++;
if (needs[ch] > 0 && needs[ch] >= window[ch]) {
count++;
}
//移动到不满足条件为止
while (count == t.length()) {
ch = s.charAt(left);
if (needs[ch] > 0 && needs[ch] >= window[ch]) {
count--;
}
if (right - left + 1 < minLength) {
minLength = right - left + 1;
res = s.substring(left, right + 1);
}
window[ch]--;
left++;
}
right++;
}
return res;
}
public static void main (String[] args) {
String s = "XDOYEZODEYXNZ";
String t = "XYZ";
minWindow(s, t);
}
}
package org.example.interview.practice;
/**
* @author xianzhe.ma
* @date 2021/11/4
*/
public class NC_29_FIND_IN_MATRIX {
public boolean Find(int target, int [][] array) {
// 判断数组是否为空
int m = array.length;
if (m == 0) return false;
int n = array[0].length;
if (n == 0) return false;
int r = 0, c = n-1; // 右上角元素
while (r<m && c>=0) {
if (target == array[r][c]) {
return true;
}
else if (target > array[r][c]) {
++r;
}
else {
--c;
}
}
return false;
}
public static void main (String[] args) {
int[][] array = {{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}};
System.out.println(Find2(15, array));
}
public static boolean Find2(int target, int [][] array) {
// 判断数组是否为空
int m = array.length;
if (m == 0) return false;
int n = array[0].length;
if (n == 0) return false;
int r = 0, c = n-1; // 右上角元素
while (r < m) {
int left = array[r][0];
int right = array[r][c];
if (target >= left && target <= right) {
boolean result = binarySearch(array[r], 0, c,target);
if (result) {
return true;
}
}
r++;
}
return false;
}
public static boolean binarySearch(int[] array, int start, int end, int target) {
if (start > end) {
return false;
}
int mid = (start + end) /2;
int value = array[mid];
if (value == target) {
return true;
}
if (target > value) {
return binarySearch(array,mid+1,end,target);
} else {
return binarySearch(array,start, mid-1, target);
}
}
}