Java 岗开发 3 年,公司临时抽查算法,离职后这几题我记一辈子 (1)
if(syn == 3) break;
t++;
}
syn == 3 ? cout << t : cout << -1;
}
</pre>
2、一个数轴上共有 N 个点,第一个点的坐标是度度熊现在位置,第 N-1 个点是度度熊的家。现在他需要依次的从 0 号坐标走到 N-1 号坐标。
但是除了 0 号坐标和 N-1 号坐标,他可以在其余的 N-2 个坐标中选出一个点,并直接将这个点忽略掉,问度度熊回家至少走多少距离?
解答:
从 N-2 个坐标中选出一个点,并直接将这个点忽略掉。直接忽略一个点只会直接影响到,这个节点前后节点的距离。这个 影响的距离我们暂且命名为优化距离,将所有节点按顺序组成三个节点的集合,通过这种方式只需要通过一次循环便能得到结果。
优化距离越大说明如果去掉这个集合的中点元素将会使得总距离越短,下面上代码。
import
java.util.
Scanner;
publicclass
Main
{
publicstaticvoid
main(String[] args)
{
Scanner
scanner = new
Scanner(System.in);
int
length = scanner.nextInt();
int[] arrays = newint[length];
for(int i = 0; i < length; i++)
{
arrays[i] = scanner.nextInt();
}
/**
* sum 总距离
* repetition 三个节点 中被重复计算的总距离
* select 优化距离最大的 三个节点两两相加的距离
* add 三个结尾距离为 max 中 头尾节点的距离
* last 最后三个节点中 尾距离没有被计算两次 需要加上
* optimizeDistance 优化距离
*/
int
sum = 0,
int
repetition = 0,
intselect = 0,
int
add = 0,
intlast = 0,
int
optimizeDistance = 0;
for(int i = 0; i <= (arrays.length - 3); i++)
{
intbegin = arrays[i];
int
mid = arrays[i + 1];
intend = arrays[i + 2];
//三个点之间的距离
int
threePointDistance = Math.abs(mid - begin) + Math.abs(end - mid);
Java 开源项目【ali1024.coding.net/public/P7/Java/git】 54. //两个点之间的距离 即被多次计算待会需要减掉的距离
int
twoPointDistance = Math.abs(end - mid);
int
contrast = threePointDistance - Math.abs(begin - end);
repetition += twoPointDistance;
sum += threePointDistance;
last = twoPointDistance;
if(contrast > o **《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》开源** ptimizeDistance)
{
optimizeDistance = contrast;
select = threePointDistance;
add = Math.abs(end - begin);
}
}
System.
out.println((sum - select + last) - repetition + add);
}
}
</pre>
3、度度熊最近对全排列特别感兴趣,对于 1 到 n 的一个排列,度度熊发现可以在中间根据大小关系插入合适的大于和小于符号(即 '>' 和 '<' )使其成为一个合法的不等式数列。
但是现在度度熊手中只有 k 个小于符号即('<'')和 n-k-1 个大于符号(即'>'),度度熊想知道对于 1 至 n 任意的排列中有多少个排列可以使用这些符号使其为合法的不等式数列。
解答:
面试准备+复习分享:
为了应付面试也刷了很多的面试题与资料,现在就分享给有需要的读者朋友,资料我只截取出来一部分哦
评论