面试中遇到的算法题(一)
2017-11-06 10:03
225 查看
求数组的子数组之和的最大值
比如 -5,3,-7,3,2,3,连续最大整数和为 3+2+3 = 8
算法1:穷举法
思路:记Sum[i,…,j]为数组第i个元素到第j个元素的和(其中0<=i<=j
Java代码如下public int getMaxSum(int[] nums){ int max = nums[0]; for(int i = 0;i < nums.length;i++){ for(int j = i;j < nums.length;j++){ int sum = 0; for(int k = i;k<=j;k++){ sum += nums[k]; } if(max < sum) max = sum; } } return max; }
算法2:穷举法的优化方法,如果注意到Sum[i,…,j] = Sum[i,…,j-1] + nums[j],则可将算法中的最后一个for循环省略,避免重复计算。时间复杂度为O(n2)代码如下:
public int getMaxSum(int[] nums){ int max = nums[0]; for(int i = 0;i < nums.length;i++){ int sum = 0; for(int j = i;j < nums.length;j++){ sum += nums[j]; if(max < sum) max = sum; } } return max; }
算法3:动态规划方法,时间复杂度O(n).Java代码如下:
public int getMaxSum(int[] nums){ int max = nums[0]; int sum = max; for(int i = 0;i < nums.length;i++){ sum = Math.max(sum + nums[i],nums[i]); max = Math.max(max,sum); } System.out.println(max); return max; }
相关文章推荐
- 面试中最常遇到的10大算法类型
- 分享Java面试中遇到的一些经典算法题目
- java面试中常遇到的算法笔试题
- 面试中遇到的一道算法题,请各位对我的算法指点一下
- 面试遇到了算法题?看这篇就够啦。
- HashMap与Hashtable的区别是面试中经常遇到的一个问题。这个问题看似简单,但如果深究进去,也能了解到不少知识。本文对两者从来源、特性、算法等多个方面进行对比总结。力争多角度、全方位的展示二者的不同,做到此问题的终结版。
- 记录几个前端笔/面试中常遇到的算法
- 面试过程中遇到的几个简单的算法
- 【算法】 最近面试遇到的一道报数出队列的题
- 分享Java面试中遇到的一些经典算法题目 (转)
- 面试中有可能遇到的算法题--Java算法
- Java面试中遇到的一些经典算法题目
- 面试遇到的既简单又复杂的一道算法题
- Java面试中遇到的一些经典算法题目
- 分享Java面试中遇到的一些经典算法题目
- 面试中遇到的算法题
- 面试遇到的两道算法题
- Android程序员面试会遇到的算法(part 1 关于二叉树的那点事) 附Offer情况
- 面试遇到的两道算法题
- 一个朋友面试时遇到的算法题(怎么组合后得到最大整数)