当前位置: 首页 > 面试题库 >

手写代码:最大子数组问题(要求时间复杂度最佳)

田成仁
2023-03-14
本文向大家介绍手写代码:最大子数组问题(要求时间复杂度最佳)相关面试题,主要包含被问及手写代码:最大子数组问题(要求时间复杂度最佳)时的应答技巧和注意事项,需要的朋友参考一下

参考回答:

线性时间算法:该算法在每次元素累加和小于0时,从下一个元素重新开始累加。实现代码如下:

/*

时间复杂度O(n)

和最大的子序列的第一个元素肯定是正数

因为元素有正有负,因此子序列的最大和一定大于0

*/
int MaxSubSum(int *arr,int len)
{
int i;
int MaxSum = 0;
int CurSum = 0;
for(i=0;i<len;i++)
{
CurSum += arr[i];
if(CurSum > MaxSum)
MaxSum = CurSum;

//如果累加和出现小于0的情况,

//则和最大的子序列肯定不可能包含前面的元素,

//这时将累加和置0,从下个元素重新开始累加

if(CurSum < 0)
CurSum = 0;
}
return MaxSum;
}

 

 类似资料:
  • 本文向大家介绍手写代码:硬币找零问题(要求时间复杂度最佳)相关面试题,主要包含被问及手写代码:硬币找零问题(要求时间复杂度最佳)时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 给定一组硬币数,找出一组最少的硬币数,来找换零钱N。 如何减小时间复杂度:不用全局变量来保存计算过的值,也不用递归的方法来实现,用一个一维数组,再用循环来实现。 时间复杂度为O(c*n),c是coin的数量,n是am

  • 我知道,对于迭代,递增。

  • 本文向大家介绍从一个无序的整数数组中,找出最小和最大数之间缺失的数字,要求最小的时间复杂度相关面试题,主要包含被问及从一个无序的整数数组中,找出最小和最大数之间缺失的数字,要求最小的时间复杂度时的应答技巧和注意事项,需要的朋友参考一下

  • 本文向大家介绍手写代码:筛选数组arr中重复的元素,考虑时间复杂度。相关面试题,主要包含被问及手写代码:筛选数组arr中重复的元素,考虑时间复杂度。时的应答技巧和注意事项,需要的朋友参考一下 参考回答: function duplicates(arr) { //声明两个数组,a数组用来存放结果,b数组用来存放arr中每个元素的个数 var a = [],b = []; //遍历arr,如果以arr

  • 有人能帮我了解一下这个代码片段的时间和空间复杂性吗?请参考leetcode问题-单词中断II。给定一个非空字符串s和一个包含非空单词列表的字典单词dict,在s中添加空格来构造一个句子,其中每个单词都是有效的字典单词。返回所有这些可能的句子。

  • 通过上述解决方案,我们可以解决这个问题,但它不是O(N)时间复杂度。因此,我正在寻找一个用Java解决这个问题的优化方案。