@@ -379,6 +379,7 @@ public static int largestInArray(int num[]) {
379379 return lar ;
380380 }
381381
382+ // CREATE AN ARRAY
382383 public static int [] createArray () {
383384 int arr [] = new int [5 ];
384385 Scanner sc = new Scanner (System .in );
@@ -391,6 +392,7 @@ public static int[] createArray() {
391392 return arr ;
392393 }
393394
395+ // LINEAR SEARCH
394396 public static int linearSearch (int num [], int key ) {
395397 for (int i = 0 ; i < num .length ; i ++) {
396398 if (num [i ] == key ) {
@@ -403,6 +405,7 @@ public static int linearSearch(int num[], int key) {
403405 return -1 ;
404406 }
405407
408+ // BINARY SEARCH
406409 public static int binarySearch (int arr [], int key ) {
407410 int start = 0 ;
408411 int end = arr .length - 1 ;
@@ -427,13 +430,106 @@ public static void reverseArray(int num[]) {
427430 int start = 0 ;
428431 int end = num .length - 1 ;
429432 while (start <= end ) {
430- int temp = start ;
431- start = end ;
432- end = temp ;
433+ int temp = num [ start ] ;
434+ num [ start ] = num [ end ] ;
435+ num [ end ] = temp ;
433436 start ++;
434437 end --;
435438 }
436- 439+ for (int i = 0 ; i < num .length ; i ++) {
440+ System .out .print (num [i ] + ", " );
441+ }
442+ }
443+ 444+ // PAIRS OF NUM IN AN ARRAY
445+ public static void pairsOfNum (int num []) {
446+ int tp = 0 ;
447+ for (int i = 0 ; i < num .length ; i ++) {
448+ for (int j = i + 1 ; j < num .length ; j ++) {
449+ System .out .println ("(" + num [i ] + "," + num [j ] + ")" );
450+ tp ++;
451+ }
452+ }
453+ System .out .println ("Total pairs: " + tp );
454+ }
455+ 456+ public static void printSubarray (int arr []) {
457+ for (int i = 0 ; i < arr .length ; i ++) {
458+ for (int j = i ; j < arr .length ; j ++) {
459+ for (int k = i ; k <= j ; k ++) {
460+ System .out .print (arr [k ] + " " );
461+ }
462+ System .out .println ("" );
463+ }
464+ System .out .println ("" );
465+ }
466+ }
467+ 468+ public static void maxSubArraySum (int arr []) {
469+ int maxSum = Integer .MIN_VALUE ;
470+ int currSum = 0 ;
471+ int miniSum = Integer .MAX_VALUE ;
472+ 473+ for (int i = 0 ; i < arr .length ; i ++) {
474+ for (int j = i ; j < arr .length ; j ++) {
475+ currSum = 0 ;
476+ for (int k = i ; k <= j ; k ++) {
477+ currSum = currSum + arr [k ];
478+ }
479+ System .out .print (currSum + " " );
480+ if (currSum > maxSum ) {
481+ maxSum = currSum ;
482+ }
483+ if (currSum < miniSum ) {
484+ miniSum = currSum ;
485+ }
486+ System .out .println ();
487+ }
488+ System .out .println ();
489+ }
490+ System .out .println ("Max Sub-ArraySum : " + maxSum );
491+ System .out .println ("Mini Sub-ArraySum : " + miniSum );
492+ }
493+ 494+ // Max SubArray Sum - Prefix Array Meathod
495+ public static void prefixSubArraySum (int arr []) {
496+ int maxSum = Integer .MIN_VALUE ;
497+ int currSum = 0 ;
498+ int prefix [] = new int [arr .length ];
499+ 500+ prefix [0 ] = arr [0 ];
501+ for (int i = 1 ; i < arr .length ; i ++) {
502+ prefix [i ] = prefix [i - 1 ] + arr [i ];
503+ }
504+ 505+ for (int i = 0 ; i < arr .length ; i ++) {
506+ for (int j = i ; j < arr .length ; j ++) {
507+ currSum = i == 0 ? prefix [j ] : prefix [j ] - prefix [i - 1 ]; // tertiary operator
508+ // here [i] is [start] and [j] is [end]
509+ }
510+ 511+ if (currSum > maxSum ) {
512+ maxSum = currSum ;
513+ }
514+ }
515+ System .out .print ("Max Sub-Array Sum using Prefix Array: " + maxSum );
516+ }
517+ 518+ // Max SubArray Sum - KADANE's ALGO
519+ public static void kadaneSubArraySum (int arr []) {
520+ int maxSum = Integer .MIN_VALUE ;
521+ int currSum = 0 ;
522+ 523+ for (int i = 0 ; i < arr .length ; i ++) {
524+ currSum = currSum + arr [i ];
525+ 526+ if ( currSum < 0 ){
527+ currSum = 0 ;
528+ }
529+ maxSum = Math .max (currSum ,maxSum );
530+ }
531+ 532+ System .out .println ("Max SubArray Sum using Kadan's Algo: " + maxSum );
437533 }
438534
439535 public static void main (String args []) {
@@ -458,7 +554,7 @@ public static void main(String args[]) {
458554 // butterfly(7);
459555 // hRhombus(5);
460556 // diamond(4);
461- int arr [] = {2 , 4 , 6 , 8 , 10 , 12 };
557+ int arr1 [] = {2 , 4 , 6 , 8 , 10 , 12 };
462558 // System.out.println(largestInArray(arr));
463559 // createArray();
464560
@@ -472,15 +568,21 @@ public static void main(String args[]) {
472568 }
473569
474570 { // BINARY SEARCH
475- int num [] = {44 , 46 , 47 , 49 , 62 , 66 , 69 , 78 , 95 , 96 , 97 , 98 , 99 };
476- int result = binarySearch (num , 66 );
477- 478- if (result == -1 ) {
479- System .out .println ("Item Not Found" );
480- } else {
481- System .out .println ("The key is at index: " + result );
482- }
483- 571+ // int num[] = {44, 46, 47, 49, 62, 66, 69, 78, 95, 96, 97, 98, 99};
572+ // int result = binarySearch(num, 66);
573+ 574+ // if (result == -1) {
575+ // System.out.println("Item Not Found");
576+ // } else {
577+ // System.out.println("The key is at index: " + result);
578+ // }
484579 }
580+ // pairsOfNum(arr);
581+ // printSubarray(arr);
582+ // reverseArray(arr);
583+ // maxSubArraySum(arr);
584+ // prefixSubArraySum(arr);
585+ int arr [] = {-1 ,-2 ,-3 ,-4 };
586+ kadaneSubArraySum (arr );
485587 }
486588}
0 commit comments