Time complexity of Java Pascal triangle algorithm
Responsible for solving the following problems (Pascal triangle), which looks like this
[ [1],[1,1],2,3,4,6,1] ]
I have successfully implemented the code (see below), but it is difficult for me to understand the time complexity of this solution The number of operations on the list is 1 2 3 4 How does mathematics work and convert to Big-O notation when the number of n operations is reduced to n ^ 2?
I think this is similar to Gauss formula n (n 1) / 2, so o (n ^ 2) but I may be wrong for any help. Thank you very much
public class Solution { public List<List<Integer>> generate(int numRows) { if(numRows < 1) return new ArrayList<List<Integer>>();; List<List<Integer>> pyramidVal = new ArrayList<List<Integer>>(); for(int i = 0; i < numRows; i++){ List<Integer> tempList = new ArrayList<Integer>(); tempList.add(1); for(int j = 1; j < i; j++){ tempList.add(pyramidVal.get(i - 1).get(j) + pyramidVal.get(i - 1).get(j -1)); } if(i > 0) tempList.add(1); pyramidVal.add(tempList); } return pyramidVal; } }
Solution
The complexity is O (n ^ 2)
The calculation of each element in the code is completed in a constant time ArrayList access is not only a constant time operation, but also a constant time for insertion and allocation Source:
Your triangle has 1, 2... N elements This is arithmetic progression. The sum is n * (n 1) / 2, which is O (n ^ 2)