最大连续子阵列和的线性时间算法

时间:2018-03-11 06:48:35

标签: java algorithm kadanes-algorithm

我一直在从算法简介 - CLRS 解决练习,并且遇到了线性时间内最大连续子阵列(Q 4.1-5)。 请看下面我的解决方案。我一直在寻找这项练习的在线评委,但没有找到。在我寻找解决方案后解决它时,我发现kadane的算法看起来与我的实现不同,这个解决方案在所有数字都是负数时给出了正确的输出。

{{1}}

除了将手动测试用例输入程序之外,有没有办法检查此算法的有效性?

1 个答案:

答案 0 :(得分:2)

这实际上取决于您对具有所有负值的数组的定义。

如果您不将空子阵列计为可能的解决方案,那么是的,您的解决方案是正确的,实际上它与Kadane's algorithm完全相同。

data.table

唯一的区别是初始化,但如果您仔细查看,在算法的第一次迭代中,<!DOCTYPE html> <html> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script> <b> <body ng-app="" bgcolor="#f0f8ff"> <div class="container"> <div class="row" id="pwd-container"> <div class="col-md-4"></div> <div class="col-md-4"> <section class="login-form"></section> <form method="post" action="#" role="login"> <br> <br> <input type="email" name="email" placeholder="Email" required class="form-control input-lg" value="joestudent@gmail.com" /> <input type="password" class="form-control input-lg" id="password" placeholder="Password" required="" /> <div class="pwstrength_viewport_progress"></div> <button type="submit" name="go" class="btn btn-lg btn-primary btn-block">Sign in</button> <div> <br> </div> </div> New User? <input type="checkbox" ng-model="myVar" ng-init="myVar = false"> <div ng-if="myVar"> <form action="action_page.php" style="border:1px solid #ccc"> <div class="container"> <p>Please fill in this form to create an account.</p> <hr> <label><b>Email</b></label> <input type="text" placeholder="Enter Email" name="email" required> <label><b>Password</b></label> <input type="password" placeholder="Enter Password" name="psw" required> <label><b>Repeat Password</b></label> <input type="password" placeholder="Repeat Password" name="psw-repeat" required> <label> <input type="checkbox" checked="checked" style="margin-bottom:15px"> Remember me </label> <p>By creating an account you agree to our <a href="#" style="color:dodgerblue">Terms & Privacy</a>.</p> <div class="clearfix"> <button type="button" class="cancelbtn">Cancel</button> <button type="submit" class="signupbtn">Sign Up</button> </div> </div> </form> <hr> <br> </div> </body> </b> </script> </html> int max_so_far = a[0]; int max_ending_here = a[0]; for (int i = 1; i < size; i++) { max_ending_here = Math.max(a[i], max_ending_here+a[i]); max_so_far = Math.max(max_so_far, max_ending_here); } return max_so_far; 的值都为sum

但是再次,你假设你的数组都不是空的(在这种情况下你会返回max,这是你想要的吗?)和一个空的子数组(sum == 0 )不是一个可能的解决方案。