等差数列——网易

  • 如果一个数列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");
    }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一年级语文上册生字表 生字表一(共400字) 啊(ā)爱(ài)安(ān)岸(àn)爸(bà)八(bā)巴(bā)...
    meychang阅读 2,855评论 0 6
  • 【1】7,9,-1,5,( ) A、4;B、2;C、-1;D、-3 分析:选D,7+9=16;9+(-1)=8;(...
    Alex_bingo阅读 19,092评论 1 19
  • sì 支zhī茶chá 对duì 酒jiǔ,赋fù 对duì 诗shī,燕yàn子zi 对duì 莺yīng 儿é...
    每个人的孟母堂阅读 1,253评论 0 6
  • 作者/夜含 唱着一曲百转千回的歌 穿过悲伤逆流的河 当大海把星光摇曳 晨光在寻着轻浅的车辙 那是谁的泪光笑靥 有水...
    夜含阅读 461评论 3 7
  • 1.目标达成术活动期间自己的学习收获是什么,请至少书写3条; 一通过此次活动学习收获了知道如何使用甘特图来制定计划...
    紫郁蓝净阅读 251评论 0 0