Sort by

recency

|

647 Discussions

|

  • + 0 comments
    java
        public static void main(String[] args) {
            /* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
            Scanner sc = new Scanner(System.in);
            
            int N = sc.nextInt();
            int[] arr = new int[N];
            
            for (int i = 0; i < N; i++) {
                arr[i] = sc.nextInt();
            }
            
            int countOfNegativeSubArrays = 0;
            int ptr1 = 0;
            int ptr2 = 0;
            
            int sw = Arrays.copyOfRange(arr, ptr1, ptr2+1).length; // default sliding-w width of 1
            while(sw <= arr.length) {
                for (int i = 0; i < arr.length && ptr2+i+1 <= arr.length; i++) {
                    // sliding through the array.
                    int[] subArr = Arrays.copyOfRange(arr, ptr1+i, ptr2+i+1);
                    
                    /**
                        debugging:
                        
                        System.out.printf("from %d to %d\n", ptr1+i, ptr2+i);
                        System.out.println(Arrays.toString(subArr));
                        System.out.println("--------------");
                    */
                    
                    int sum = Arrays.stream(subArr).sum();
                    if(sum < 0) {
                        countOfNegativeSubArrays++;
                    }
                    // 0 : 0
                    // 1 : 1
                    // 2 : 2
                    
                    // 0 : 1
                    // 1 : 2
                    
                }
                // Update the sliding-window width
                sw = Arrays.copyOfRange(arr, ptr1, ++ptr2).length+1;
            }
            
            
            System.out.println(countOfNegativeSubArrays);
        }
    
  • + 0 comments

    Using Prefix sum

    import java.io.*;
    import java.util.*;
    
    public class Solution {
    
        public static void main(String[] args) {
            /* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
            Scanner sc = new Scanner(System.in);
            int n = sc.nextInt();
            int[] nums = new int[n];
            int[] prefixSum = new int[n];
            
            //create prefix sum of streaming numbers
            prefixSum[0] = sc.nextInt();
            for(int i=1; i<n; i++){
                int temp = sc.nextInt();
                 prefixSum[i] = prefixSum[i-1] + temp;
            }
            
            int count = 0;
            for(int end = n-1; end >= 0; end--){
                for(int start = 0; start <= end ; start++){
                    int sum = 0;
                    if(start == 0)
                         sum = prefixSum[end];
                    else
                         sum = prefixSum[end] - prefixSum[start - 1];
    
                    if(sum < 0)
                        count++;
                }
            }
               
            System.out.println(count);
            
        }
    }
    
  • + 2 comments

    First approach: Time Complexity: O(n^3)

    public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
    
            int n = sc.nextInt();
            
            int[] array = new int[n];
            
            for(int i = 0; i < n; i++) {
                array[i] = sc.nextInt();
            }
            
            System.out.println(countSubarraysWithNegativeSums(array));
            
            sc.close();
        }
        
        private static int countSubarraysWithNegativeSums(int[] array) {
            int count = 0;
            int currentSum;
            
            // Look all the possible subArrays and check it sums
            for(int i = 1; i <= array.length; i++) {
                for(int j = 0; j <= array.length - i; j++) {
                    currentSum = 0;
                    for(int z = 0; z < i; z++) {
                        currentSum += array[j + z];
                    }
                    
                    if(currentSum < 0)
                        count++;
                }
            } 
        
        return count;
    }
    				
    				
    //Second Approach: Time Complexity O(n^2)
    
    private static int countSubarraysWithNegativeSums(int[] array) {
        int count = 0;
        int currentSum;
        int n = array.length;
        
        // Look all the possible subArrays and check 
        for (int start = 0; start < n; start++) {
            currentSum = 0;
            for (int end = start; end < n; end++) {
                currentSum += array[end];
                
                if (currentSum < 0)
                    count++;
                
            }
        }
    		
            return count;
        }
    
  • + 0 comments

    int count = 0; for (int k = 0; k < n; k++) { for (int i = n; i > k; i--) { int sum = 0; for (int j = k; j < i; j++) { sum += a[j]; } if (sum < 0) count++; } } System.out.println(count);

  • + 0 comments

    import java.io.; import java.util.;

    public class Solution {

    public static void main(String[] args) {
        /* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
    
        int[] arr = new int[n];
    
        for(int i = 0; i < n; i++) {
          arr[i] = sc.nextInt();
        }
        //
        int count = 0;
        for (int i = 0; i < n; i++) {
          int sum = 0;
          for (int j = i; j < n; j++) {
            sum += arr[j];
            if (sum < 0) {
              count ++;
            }
          }
        }
        System.out.println(count);
        sc.close();
    }
    

    }