[笔试题]找数组中最长和为0连续子序列
来源:互联网 发布:网络球机控制线接线图 编辑:程序博客网 时间:2024/06/14 01:01
输入:int 型数组由正数、负数、0组成
输出:最长和为0的子序列
例:
输入:[3,0,-1,-2,-3,1,1,1,2,3,1,-2,-1]
输出:9
思路:原数组为A,长度为N
新建一个数组B[1...N+1],B[i]=A[i-1]+A[i-2]+A[1],B[1]=0 时间复杂度为O(n)
将问题转化为求B数组两个相同数字最远距离 时间复杂度可能为O(n^2)
private static int find(int[] arr) { int[] arr1 = new int[arr.length + 1]; //创建求和串,为了考虑整个串和为0,将首项设置为0; arr1[0] = 0; for (int x = 0; x < arr.length; x++) { arr1[x+1] = arr[x]+arr1[x]; } int arr2[] = new int [arr.length]; //寻找两个相同数字最大距离,从后向前,找到就ok for(int i = 0;i<arr.length;i++){ arr2[i]=0; //剩下的如果没有已找到的长,就不找了 if(i!=0&&arr2[i-1]>arr.length-i){ break; } for(int j =arr.length;j>=0;j--){ if(arr1[i]==arr1[j]){ arr2[i]=j-i; break; } } } //找最大值 int max = 0; for(int x =0;x<arr2.length;x++){ if(arr2[x]>max){ max=arr2[x]; } } return max; }
0 0
- [笔试题]找数组中最长和为0连续子序列
- 最长连续子数组和为0
- 猿辅导2017校园招聘笔试题 求和为0的最长连续子数组
- 20170831美团笔试:长度为n的数组中最长的和为K的倍数的连续子数组
- 最长连续子序列和
- 最长连续子序列和
- 求数组中最长的连续子序列
- 无序数组中找到最长连续子序列
- 求数组中最长连续递增子序列
- 数组中最长连续序列
- 求数组最长的和为0的连续子数组
- 和为0连续子序列
- [笔试]阿里笔试-最长公共连续子序列
- 【Java笔试题】从数组中找连续元素凑和
- 矩阵中最长连续递增子序列
- 连续最长子序列
- 最长连续子序列
- 最长连续子序列
- 文字的右上角显示TM的代码
- 连续子串中出现超过一半次数的字符串 后缀数组 uva 11107 Life Forms
- OC基础-继承
- UI高度可定制化KxMenu弹出菜单
- 完全搞懂KMP算法
- [笔试题]找数组中最长和为0连续子序列
- PHP学习(三)--变量的类型
- BNUOJ 34982 Beautiful Garden 2014北京邀请赛B (有意思的枚举题)
- uvalive 3026(kmp)
- 重复出现超过m次的最长的子串的最大下标 后缀数组或Hash+LCP UVA 12206 - Stammering Aliens
- ListFragment的使用
- java 基础总结
- 转:网页爬取页面去重策略
- USACO 1.5 Prime Palindromes (打表查询)