java - 使用 java 挑战问题在森林中查找和格式化视觉上美观的树木图案
问题描述
最近面临一个有上述问题的面试代码挑战。有一个人拥有他的森林,树木以行的形式种植。每行都应以视觉上令人愉悦的方式包含一棵树。例如。如上图所示:
上面的树形图案在视觉上永远不会令人愉悦: image3
这里每列代表行中的树及其高度。没有两棵彼此相邻的树应该具有相同的高度,以使行在视觉上美观。农场主希望所有的树木都具有视觉美感。为此,他最多可以连续砍一棵树。找出可以连续切割一棵树的方法数量,以使一排树美观。
即使某行已经在视觉上美观,也返回 0 作为函数的输出。
否则,即使在砍掉任何一棵树之后,行也永远无法形成视觉上美观的图案;那么函数应该返回-1。
例如:A[] = {3, 4, 5, 3, 7}; 那么它可以通过 3 种方式在视觉上美观:remove 3, A[] = {4, 5, 3, 7} else remove 4, A[] = {3, 5, 3, 7} else remove 5, A[ ] = {3, 4, 3, 7} 所以函数应该返回 3。
G。B[] = {1, 2, 3, 4, 2, 5}; 这种模式永远不可能在视觉上美观,所以函数应该返回-1。
例如。c[] = {1, 3, 1, 2}; 这种模式在视觉上已经很美观了,所以它应该返回 0。
我试图解决它,如下一个解决方案部分所示。有人可以建议更多更好的方法来解决问题以降低代码复杂性并更快地使用 java 吗?
解决方案
下面是我的代码。如果下面还有任何问题,请纠正我。
public int solution(int[] A) {
int count = 0;
List<Integer> arr = new ArrayList<Integer>();
ArrayList<Integer> arrt = new ArrayList<Integer>();
for (int i : A) {
arr.add(i);
}
// first check if its already in correct sequence
boolean check = false;
for (int j = 0; j < A.length-2 ; j++) {
if ((arr.get(j) - arr.get(j + 1) > 0) && (arr.get(j + 1) - arr.get(j + 2) < 0)) {
check = true;
} else if ((arr.get(j) - arr.get(j + 1) < 0) && (arr.get(j + 1) - arr.get(j + 2) > 0)) {
check = true;
} else {
check = false;
break;
}
}
if (check) {
return 0;
}
List<Integer> ab = new ArrayList<Integer>();
for (int i = 0; i < A.length; i++) {
ab.clear();
ab.addAll(arr);
ab.remove(i);
int f = 0;
boolean okay = false;
while (f < A.length - 3) {
if (!okay && f != 0) {
break;
}
if ((ab.get(f) - ab.get(f + 1) > 0) && (ab.get(f + 1) - ab.get(f + 2) < 0)) {
okay = true;
} else if ((ab.get(f) - ab.get(f + 1) < 0) && (ab.get(f + 1) - ab.get(f + 2) > 0)) {
okay = true;
} else {
okay = false;
}
f++;
}
if (okay) {
count++;
}
}
if (count == 0)
count = -1;
return count;
}
推荐阅读
- python - 如何在 Python 代码中“单击”一个 QWidget 按钮
- excel - 循环遍历范围单元格和下拉列表
- javascript - Mongoose:无法更新数据
- python - tkinter 自动加载窗口
- google-analytics - 为 Google Analytics 4 设置服务器端事件跟踪的推荐方法?
- rust - 我应该如何在 rust 中获取该对象的副本?
- javascript - Firebase Auth 电子邮件验证 - 我需要 SDK 管理员来更改电子邮件验证用户吗?
- python - Filter elements by optional lists of related elements
- reactjs - 在 react-query 中使用 observables
- angular - Spartacus - 从 Spartacus 的 PDP 页面访问用户对象?