avatar
贡献一道电面题# JobHunting - 待字闺中
q*c
1
给一array of ints, 找出三个数使他们能组成一个三角形。刷刷刷!!!
avatar
r*y
2
这啥题啊,组成三角形三个边?

【在 q********c 的大作中提到】
: 给一array of ints, 找出三个数使他们能组成一个三角形。刷刷刷!!!
avatar
q*c
3
对,比如找到A,B,C满足
A+B>C
A+C>B
B+C>A

【在 r****y 的大作中提到】
: 这啥题啊,组成三角形三个边?
avatar
l*8
4
bool canBuildTriangle(int a[], int n) {
sort(a, a+n);
for (int *p = a+1; p < a+n-1; p++)
if (*p + *(p-1) > *(p+1))
return true;
return false;
}

【在 q********c 的大作中提到】
: 给一array of ints, 找出三个数使他们能组成一个三角形。刷刷刷!!!
avatar
d*i
5
谁家的题?
avatar
r*y
6
要求找数,不是真假

【在 l*********8 的大作中提到】
: bool canBuildTriangle(int a[], int n) {
: sort(a, a+n);
: for (int *p = a+1; p < a+n-1; p++)
: if (*p + *(p-1) > *(p+1))
: return true;
: return false;
: }

avatar
l*8
7
我只是用程序表达一下思路,懒得返回三个数了。 要改的话,就是把return 语句改改.

【在 r****y 的大作中提到】
: 要求找数,不是真假
avatar
q*c
8
G. longway的思路是对的。

【在 r****y 的大作中提到】
: 要求找数,不是真假
avatar
d*i
9
G的题?
avatar
r*y
10
显然没找全啊
只找了排序后相邻的两个较小边加起来的情况
排序后不相邻的两个边为啥不能加起来大于第三边呢

【在 q********c 的大作中提到】
: G. longway的思路是对的。
avatar
r*y
11
抱歉,程序也不对

改.

【在 l*********8 的大作中提到】
: 我只是用程序表达一下思路,懒得返回三个数了。 要改的话,就是把return 语句改改.
avatar
l*8
12
请指教,谢谢了

【在 r****y 的大作中提到】
: 抱歉,程序也不对
:
: 改.

avatar
q*c
13
不须要找全,只需返回第一个满足条件的三个数

【在 r****y 的大作中提到】
: 显然没找全啊
: 只找了排序后相邻的两个较小边加起来的情况
: 排序后不相邻的两个边为啥不能加起来大于第三边呢

avatar
r*y
14
我只知道sort以后老老实实简简单单:
for (int *p = a; p < a+n-2; p++) {
for (int *q = p+1; q < a+n-1; q++) {
for (int *r = q+1; r < a+n; r++) {
if (*p + *q > *r) {
printf("%d, %d, %d\n", *p, *q, *r);
}
else {
break;
}
}
}
}

【在 l*********8 的大作中提到】
: 请指教,谢谢了
avatar
r*y
15
写法一样,找到一个就停下即可。

【在 q********c 的大作中提到】
: 不须要找全,只需返回第一个满足条件的三个数
avatar
w*m
16
your solution is much more slower..
It could be done within single loop

【在 r****y 的大作中提到】
: 我只知道sort以后老老实实简简单单:
: for (int *p = a; p < a+n-2; p++) {
: for (int *q = p+1; q < a+n-1; q++) {
: for (int *r = q+1; r < a+n; r++) {
: if (*p + *q > *r) {
: printf("%d, %d, %d\n", *p, *q, *r);
: }
: else {
: break;
: }

avatar
r*y
17
do you have this loop? :-)

【在 w****m 的大作中提到】
: your solution is much more slower..
: It could be done within single loop

avatar
w*m
18
longway2008's solution is the one

【在 r****y 的大作中提到】
: do you have this loop? :-)
avatar
w*3
19
如果输出真假是可以的,如果要求全部就只能brute force了

【在 l*********8 的大作中提到】
: bool canBuildTriangle(int a[], int n) {
: sort(a, a+n);
: for (int *p = a+1; p < a+n-1; p++)
: if (*p + *(p-1) > *(p+1))
: return true;
: return false;
: }

avatar
r*y
20
for different question, right?

【在 w****m 的大作中提到】
: longway2008's solution is the one
avatar
s*e
21
三角形的条件就是任意两边之和大于第三边。 所以,先排序,最小的两边相加之和大
于第三边的话,那其他任意俩边之和无疑是大于第三边的。
java:
public boolean isTriangle(int[] arr) {
Arrays.sort(arr);
for (int i = 0; i < arr.length - 2; i++) {
if (arr[i] + arr[i + 1] > arr[i + 2])
return true;
}
return false;
}
avatar
o*g
22
程序结果是对的,但是逻辑不够严谨
比如排好序之后,序号相邻的0 1 2 3四个数
如果0 1 2 不满足,那还有0 1 3, 0 2 3, 1 2 3三组数。为什么只检查1 2 3就可以
了呢
因为0 1 2 不满足,那0 1 3肯定也不满足,因为3>=2。
如果0 2 3满足,则1 2 3必然满足,反之不一定。
因为题目是只需要找到一组就行了。所以只检查1 2 3这组就好了。

【在 s********e 的大作中提到】
: 三角形的条件就是任意两边之和大于第三边。 所以,先排序,最小的两边相加之和大
: 于第三边的话,那其他任意俩边之和无疑是大于第三边的。
: java:
: public boolean isTriangle(int[] arr) {
: Arrays.sort(arr);
: for (int i = 0; i < arr.length - 2; i++) {
: if (arr[i] + arr[i + 1] > arr[i + 2])
: return true;
: }
: return false;

avatar
x*2
23
注意把负数剔出去
avatar
G*A
24
证明只需要check相邻的三个数:
假设有三个不相邻的数也符合要求:a_k-i + a_k > a_k+j where i and j are任意正整
数。
因为a_k-1 >= a_k-i,所以 a_k-1 + a_k > a_k+j
因为a_k+1 <= a_k+j,所以 a_k-1 + a_k > a_k+1

【在 o***g 的大作中提到】
: 程序结果是对的,但是逻辑不够严谨
: 比如排好序之后,序号相邻的0 1 2 3四个数
: 如果0 1 2 不满足,那还有0 1 3, 0 2 3, 1 2 3三组数。为什么只检查1 2 3就可以
: 了呢
: 因为0 1 2 不满足,那0 1 3肯定也不满足,因为3>=2。
: 如果0 2 3满足,则1 2 3必然满足,反之不一定。
: 因为题目是只需要找到一组就行了。所以只检查1 2 3这组就好了。

avatar
G*A
26
6 + 7 > 3 满足么?
“任意2边和大于第三边”是必要条件,但是不是充要条件我忘记论证方法了。

【在 d********i 的大作中提到】
: 我能请教下为什么3,6,7可以组成一个三角形吗?
: 参考链接:http://www.geeksforgeeks.org/find-number-of-triangles-possible/

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。