int array[] = {-1, 4, -2, 5, -5, 2, -20, 6};
Nếu tôi có mảng đó, Kadane thuật toán thực hiện của tôi để tìm subarray tối đa hoạt động:Kadane Thuật toán số âm
int max_so_far = INT_MIN;
int max_ending_here = 0;
for (int i = 0; i < size; i++) {
max_ending_here = max(max_ending_here + array[i], 0);
max_so_far = max(max_ending_here, max_so_far);
}
printf("%d\n", max_so_far);
Tuy nhiên, nếu tôi có một mảng của tất cả các âm:
int array[]= {-10, -10, -10};
Nó sẽ không hoạt động, nó phải trả về -10, nhưng tôi nhận được 0.
Làm cách nào để tôi cũng có thể làm việc cho số âm?
Cảm ơn bạn!
Có lẽ bạn có thể mở rộng về việc tại sao/làm thế nào giải pháp này sẽ làm việc, và hãy bình luận của bạn mã. –
Trên tất cả, bạn nên kiểm tra mảng là trống hoặc null.Set giá trị của max_ending_here là số đầu tiên của giá trị của mảng. Sau đó lặp lại mảng bắt đầu từ số thứ hai của mảng.if chọn giá trị cực đại của mảng (max_ending_here + [i], mảng [i]). nếu mảng là tất cả các số âm, đầu ra sẽ là số âm lớn nhất. – flmAtVancl