博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法:管窥算法-零子数组
阅读量:5860 次
发布时间:2019-06-19

本文共 715 字,大约阅读时间需要 2 分钟。

1.可以用类似  的算法做。

2.一般做法。

(注:任何关于子序列的和的都可以用这种思想)

  1.计算出前i项和,sum[i],

  2.因为“数组A第i到j项的和 = 数组前j项的和sum(j) - 数组前i项的和sum(i-1)”(所以有了前i项我数组sum[],就可以得到A数组的所有子序列了,A的子序列不是sum中的元素就是sum中的任意两个元素相减)

         3.所以只需要:把所有子序列一分为二,其中一部分为sum中包含的元素记做 T1集合,另一部分为sum中任意两元素相减的集合记做T2集合。

                   1,定义S[-1] = 0,对sum[-1, 0,..., N-1]排序后计算相邻元素的差的绝对值(排过序之后,相邻元素的差一定比不相邻的小,所以T2集合中的其他元素是不需要计算和比较了的),记做m1。

      2.找出T1集合(即sum)中的元素的绝对值最小的值,记做m2.

      3.比较m1和m2,哪个小就是哪个了。

1 /** 2  * 零子算法-要求时间复杂度为nlogn 3  * @param a 4  * @return 5  */ 6     public static int T(int[] a){ 7         //创建sum数组,第i项为a数组的前i项和 8         List
sum=new ArrayList<>(a.length); 9 sum.add(a[0]);10 for(int i=1;i

 

 

转载于:https://www.cnblogs.com/minconding/p/10453847.html

你可能感兴趣的文章
搭建ES集群
查看>>
浏览器的兼容性
查看>>
Android Retrofit 实现文字(参数)和多张图片一起上传
查看>>
Compare Version Numbers LC解题记录
查看>>
Mysql 中创建索引和索引的使用问题
查看>>
UIAlertController 介绍
查看>>
为Android开发者整理的Google I/O开发者大会第一弹
查看>>
(cons '(〇 . 前言) 《为自己写本-Guile-书》)
查看>>
JQuery tokeninput输入提示插件获取JSON数据
查看>>
一天一点linux(11):如何用U盘装Linux系统?
查看>>
Android动态设置控件长宽比的几种常见方法
查看>>
博客引入漂亮字体二三事
查看>>
ajax与jquery-pagination实现异步翻页功能
查看>>
SegmentFault 高效改版,快来内测啦!
查看>>
[LintCode] Valid Sudoku [数独]
查看>>
微信Android资源混淆打包工具,如何让应用安装包立减1M
查看>>
Druid 1.1.14 发布,阿里开源连接池
查看>>
史上最全的Java进阶书籍推荐
查看>>
docker学习系列13 实现 基于pxc 的mysql 多节点主主同步 ...
查看>>
2017-12-01 中英文代码对比之ZLOGO 4 & LOGO
查看>>