您的位置:首页 > 职场人生

今日头条面试手写代码-找出所有非递增减的子数组

2017-04-11 19:31 465 查看
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;

public class Main {

public static HashSet<String> set = new HashSet<>();

public static String fun(List<Integer> list) {
StringBuilder sb = new StringBuilder();
for (Integer i : list) {
sb.append(i);
}
return sb.toString();
}

public static void DFS(int[] arr, int pos, List<Integer> res) {
if (pos == arr.length) {
if (res.size() > 0) {
String ans = fun(res);
if (!set.contains(ans)) {
System.out.println(res);
set.add(ans);
}
}
return;
}
if (res.size() == 0) {
// no join
DFS(arr, pos + 1, res);
// join
List<Integer> newList = new ArrayList<>(res);
newList.add(arr[pos]);
DFS(arr, pos + 1, newList);
} else {
int last = res.get(res.size() - 1);
if (last <= arr[pos]) {
// no join
DFS(arr, pos + 1, res);
// join
List<Integer> newList = new ArrayList<>(res);
newList.add(arr[pos]);
DFS(arr, pos + 1, newList);
} else {
// no join
DFS(arr, pos + 1, res);
}
}
}

public static void main(String[] args) {
int arr[] = new int[]{4, 6, 7, 7};
DFS(arr, 0, new ArrayList<>());
}
}


面试中没写出来的原因总结:

1. 太紧张

2. 不适应牛客上的网页编程

3. 边界条件没写好
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: