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