math - 三角形 : Determine whether a triangle can be built from a given set of edges

标签 math geometry

我在网上找到了解决以下编码问题的解决方案:

给出了一个由 N 个整数组成的零索引数组 A。如果 0 ≤ P < Q < R < N 并且:

    A[P] + A[Q] > A[R],
    A[Q] + A[R] > A[P],
    A[R] + A[P] > A[Q].

例如,考虑数组 A 使得:

A[0] = 10 A[1] = 2 A[2] = 5
A[3] = 1 A[4] = 8 A[5] = 20

三元组 (0, 2, 4) 是三角形的。

写一个函数:
 int solution(int A[], int N);

也就是说,给定一个由 N 个整数组成的零索引数组 A,如果该数组存在三角形三元组,则返回 1,否则返回 0。

解决方案是这样的:
A.Sort
  for (int i = 0; i < A.length - 2 && A[i] > 0; i++)
  {
         if (A[i] + A[i + 1] > A[i + 2])
            return 1;
  }

但是当我们对数组进行排序时,原始索引不再有效,并且在 i 位置的项目可以移动到 j 位置,其中 j>i 或 j

该解决方案假设验证断言(三角形)的值在排序数组中自动相邻。

在示例数组中,如果我们像这样改变:

A[0] = 10 A[1] = 6(替换 2)A[2] = 5
A[3] = 1 A[4] = 8 A[5] = 20
在这里,我们得到了 2 个新的 traingle 10 6 5 和 6 5 8。(和 10 5 8)

我们排序: 1 5 6 8 10 20 --> 这里,原始解 (10,5,8) 值不相邻(没有 traingle),而是我们有 (5,6,8) 和 (6 8 10)。然后算法返回1。
似乎如果三角形存在,那么至少一个三角形的值将是相邻的,但我没有找到任何证据。

最佳答案

这是我在 Java 中的解决方案。在 Codility 上给我 100% 结果。

class Solution {
    public int solution(int[] A) {
        Arrays.sort(A);

        for (int i = 2; i < A.length; i++) {
            long p = A[i - 2]; 
            long q = A[i - 1]; 
            long r = A[i];

            if (p + q <= r) {
                continue;
            } 
            if (r + p <= q) {
                continue;
            } 
            if (q + r <= p) {
                continue;
            } 
            return 1;
        }

        return 0;
    }
}

关于math - 三角形 : Determine whether a triangle can be built from a given set of edges,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29818553/

相关文章:

CSS Nth Child 根据 N 计算顶部高度

algorithm - 怎样用最简单的方法求某次幂的个位数

python - python中大数的求和产生最大参数

c++ - 处理 C++ 角度中的符号变化

algorithm - 给定n个点,每个点都有自己的范围,调整所有点以最大化相邻点的最小距离

html - 渐变 CSS 箭头

c++ - 在二维字符数组中绘制三角形

graphics - 给定一个点,找到一条与已知直线成直角相交的直线

matlab - 在 MATLAB 中从三个输入点通过 3D 空间创建半椭圆路径,然后输入 Visual Studio 并最终输入机械臂

c++ - 计算直线上点的投影的优化函数?