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

2.一般做法。https://blog.csdn.net/xueyingxue001/article/details/52935547

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

  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<Integer> sum=new ArrayList<>(a.length);
 9         sum.add(a[0]);
10         for(int i=1;i<a.length;i++){
11             sum.add(sum.get(i-1)+a[i]);
12         }
13 //        对sum排序
14         sum.sort(null);
15         //sum中绝对值最小的为m1,sum相邻元素相减绝对值最小的为m2.
16         int m1=Math.abs(sum.get(0));
17         int m2=Math.abs(sum.get(1)-sum.get(0));
18         int j=0,k=0;
19         for(int i=1;i<sum.size();i++){
20             j=Math.abs(sum.get(i));
21             k=Math.abs(sum.get(i)-sum.get(i-1));
22             if(j<m1){
23                 m1=j;
24             }
25             if(k<m2){
26                 m2=k;
27             }
28         }
29         return m1<m2?m1:m2;
30     }

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

算法:管窥算法-零子数组相关推荐

  1. 算法学习:后缀数组(SA)

    [参考博客] https://xminh.github.io/2018/02/27/%E5%90%8E%E7%BC%80%E6%95%B0%E7%BB%84-%E6%9C%80%E8%AF%A6%E7 ...

  2. Java数据结构和算法:字符串、数组和广义表

    数组和广义表是与前述的线性表有所区别的数据结构.它们可以看成是线性表在下述含义上的扩展:线性表中的元素本身也是一个数据结构 字符串 字符串的定义.存储结构 字符串(string)是由n (n≥0) 个 ...

  3. Algorithm:C+语言实现之数组相关算法(和为定值的两个数、和为定值的m个数、荷兰国旗、长度为2n的洗牌算法、任意长度数组的洗牌算法)

    Algorithm:C+语言实现之数组相关算法(和为定值的两个数.和为定值的m个数.荷兰国旗.长度为2n的洗牌算法.任意长度数组的洗牌算法) 目录 数组 1.寻找和为定值的两个数 2.和为定值的m个数 ...

  4. asp子窗口读取父窗口数据_算法与数据结构基础 - 数组(Array)

    数组基础 数组是最基础的数据结构,特点是O(1)时间读取任意下标元素,经常应用于排序(Sort).双指针(Two Pointers).二分查找(Binary Search).动态规划(DP)等算法.顺 ...

  5. leetcode初级算法4.两个数组的交集 II

    leetcode初级算法4.两个数组的交集 II 仅为个人刷题记录,不提供解题思路 题解与收获 我的解法:(总结在代码中) public int[] intersect(int[] nums1, in ...

  6. leetcode初级算法1.删除排序数组中的重复项

    leecode初级算法1.删除排序数组中的重复项 仅为个人刷题记录,不提供解题思路 题解与收获 class Solution {public int removeDuplicates(int[] nu ...

  7. 算法题 如何找到数组中重复的数字

    面试题3 数组中重复的数字 题 目 :找出数组中重复的数字. 在一个长度为n的数组里的所有数字都在0 ~ n-1的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次. ...

  8. [算法模板]树状数组

    [算法模板]树状数组 思路 图片转自:yhf_2015--彻底理解树状数组 使用这个图片就能很快的理解树状数组. 我们可以先根据图片来分解一个十进制数成二次幂. example: \(15=2^0+1 ...

  9. No.5终于搞懂了kmp算法(精髓为next数组的求解过程,此文next数组未经过优化)

    背景 KMP 是经典的字符串匹配算法,在大学课本里面都是讲到过的,不过我感觉课本都讲的太生硬了,很容易忘记.大多数博客也是讲的云里雾里的,一开始就来个公式+部分匹配表,反正我感觉对于没有计算机基础的童 ...

  10. 常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构)

    常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构) 数据结构和算法作为程序员的基本功,一定得稳扎稳打的学习,我们常见的框架底层就是各类数据 ...

最新文章

  1. 数据结构 - 有两个链表,第一个升序,第二个降序,合并为一个升序链表(C++)
  2. 【Linux部署】Greenplum数据库6.13.0单机版【重启实录】(5次报错问题及解决的避坑指南+日志文件查看方法)
  3. oracle 创建nchar类型,nchar类型的用法!
  4. build.xml编译报错Specified VM install not found: type Standard VM, name jdk1.7.0_45
  5. LED音乐频谱之点阵
  6. Docker 架构原理及简单使用
  7. callable线程池示例_Java Callable Future示例
  8. 拓端tecdat|r语言ggplot2误差棒图快速指南
  9. 斐讯盒子T1_【YYF固件】无语音实用版刷机固件及教程分享
  10. 费率转换成利率的计算器_存款利率计算器
  11. linux 小度 驱动_小度WiFi怎么安装 小度WiFi驱动安装
  12. 电脑桌面显示不全设置方法
  13. 技术与教研并驾齐驱,海风教育如何用模式创新定义教育智能新高度?
  14. 数据库——关系数据库规范化习题
  15. 数据可视化-制作交易收盘价
  16. props写法_详解Vue内部怎样处理props选项的多种写法
  17. windows c++ (3) windows获取进程PID、进程路径、进程启停及文件相关操作
  18. Python+Django电影推荐系统搭建
  19. 英语智能语音测试软件,卓帆英语人机对话智能评测练习软件
  20. MongoDB基础-张晓飞-专题视频课程

热门文章

  1. Atitit arch design context软件架构设计的内容 目录 1. 考虑到架构设计原则 1 1.1. 开发效率 稳定性 可靠些等 性能 1 1.2. 简单原则则 1 1.3. 配置
  2. 目录 1. 常见mime类型 1 1.1. 2.1.1. Type application 2 2.1.2. Type audio 22.1.3. Type image 32.1.4. Type t
  3. Atitit hadoop使用总结 目录 1.1. 下载300m ,解压后800M 1 1.2. 二:需要的jar包 1 2. Demo code 2 2.1. WCMapper 2 2.2. WC
  4. Atitit  补充说明 sql知识图谱与线路图attilax总结补充说明
  5. atitit.判断时间重叠方法总结 java c++ c#.net js php
  6. paip.mysql 全文索引查询空白解决
  7. 生产运维那些事儿-监控篇
  8. (转)先锋伯格:选择一条少有人走的路,所有的不同由此开始
  9. 阿里云原生“因云而生”心智大图重磅发布
  10. 技术人 | 浅谈如何成为技术一号位?