美文网首页
等差数列——网易

等差数列——网易

作者: 远o_O | 来源:发表于2017-08-31 09:47 被阅读33次
    • 如果一个数列S满足对于所有的合法的i,都有S[i + 1] = S[i] + d, 这里的d也可以是负数和零,我们就称数列S为等差数列。

    小易现在有一个长度为n的数列x,小易想把x变为一个等差数列。小易允许在数列上做交换任意两个位置的数值的操作,并且交换操作允许交换多次。但是有些数列通过交换还是不能变成等差数列,小易需要判别一个数列是否能通过交换操作变成等差数列

    题目大意:

    • 判断一个数列是否是等差数列,因此该题的优化主要集中在Top 2问题上面。

      • parition算法:O(n)
      • 优先队列:O(nlog2)
      • 排序:O(nlogn)
    • 该题还有一种有bug的做法,采用等差数列求和公式,时间复杂度虽然同样达到O(n),但是明显更快,因为是真正的O(n),只需扫描一遍。

    bug主要是,sum虽然可以和等差数列的和一样,但是不能证明该数列是等差数列。
    虽然该解法可以通过OJ,显然是OJ测试用例不足。

    Code

    public class DisArr {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            int n = scanner.nextInt();
            int a[] = new int[n];
            for (int i = 0; i < n; ++i)
            {
                a[i] = scanner.nextInt();
            }
            scanner.close();
    
            Arrays.sort(a);
            int dis = a[1] - a[0];
            for (int i = 1; i < a.length; ++i)
            {
                if (a[i] - a[i - 1] != dis)
                {
                    System.out.println("Impossible");
                    return;
                }
            }
            System.out.println("possible");
        }
    }
    
    

    相关文章

      网友评论

          本文标题:等差数列——网易

          本文链接:https://www.haomeiwen.com/subject/bigfjxtx.html