An array is a basic data structure to store a collection of elements sequentially . But elements can be accessed randomly since each element in the array can be identified by an array index.
Dynamic Array
... an array has a fixed capacity and we need to specify the size of the array when we initialize it. Sometimes this will be somewhat inconvenient and wasteful. Most programming languages offer built-in dynamic array which is still a random access list data structure but with variable size. For example, we have vector in C++ and ArrayList in Java.
Operations in Dynamic Array
// "static void main" must be defined in a public class.publicclassMain {publicstaticvoidmain(String[] args) {// 1. initializeList<Integer> v0 =newArrayList<>();List<Integer> v1; // v1 == null// 2. cast an array to a vectorInteger[] a = {0,1,2,3,4}; v1 =newArrayList<>(Arrays.asList(a));// 3. make a copyList<Integer> v2 = v1; // another reference to v1List<Integer> v3 =newArrayList<>(v1); // make an actual copy of v1// 3. get lengthSystem.out.println("The size of v1 is: "+v1.size());// 4. access elementSystem.out.println("The first element in v1 is: "+v1.get(0));// 5. iterate the vectorSystem.out.print("[Version 1] The contents of v1 are:");for (int i =0; i <v1.size(); ++i) {System.out.print(" "+v1.get(i)); }System.out.println();System.out.print("[Version 2] The contents of v1 are:");for (int item : v1) {System.out.print(" "+ item); }System.out.println();// 6. modify elementv2.set(0,5); // modify v2 will actually modify v1System.out.println("The first element in v1 is: "+v1.get(0));v3.set(0,-1);System.out.println("The first element in v1 is: "+v1.get(0));// 7. sortCollections.sort(v1);// 8. add new element at the end of the vectorv1.add(-1);v1.add(1,6);// 9. delete the last elementv1.remove(v1.size() -1); }}
In some languages, the multidimensional array is actually implemented internally as a one-dimensional array while in some other languages, there is actually no multidimensional array at all.
1. C++ stores the two-dimensional array as a one-dimensional array.
So actually A[i][j] equals to A[i * N + j] if we defined_A_as a one-dimensional array which also contains M * N elements.
2. In Java, the two-dimensional array is actually a one-dimensional array which contains M elements, each of which is an array of N integers.
The picture below shows the actual structure of a two-dimensional array A in Java:
packagecrunchify.com.tutorial;importjava.util.ArrayList;importjava.util.Iterator;importjava.util.List;/** * @author Crunchify.com */publicclassCrunchifyIterateThroughList {publicstaticvoidmain(String[] argv) {// create listList<String> crunchifyList =newArrayList<String>();// add 4 different values to listcrunchifyList.add("eBay");crunchifyList.add("Paypal");crunchifyList.add("Google");crunchifyList.add("Yahoo");// iterate via "for loop"System.out.println("==> For Loop Example.");for (int i =0; i <crunchifyList.size(); i++) {System.out.println(crunchifyList.get(i)); }// iterate via "New way to loop"System.out.println("\n==> Advance For Loop Example..");for (String temp : crunchifyList) {System.out.println(temp); }// iterate via "iterator loop"System.out.println("\n==> Iterator Example...");Iterator<String> crunchifyIterator =crunchifyList.iterator();while (crunchifyIterator.hasNext()) {System.out.println(crunchifyIterator.next()); }// iterate via "while loop"System.out.println("\n==> While Loop Example....");int i =0;while (i <crunchifyList.size()) {System.out.println(crunchifyList.get(i)); i++; }// collection stream() util: Returns a sequential Stream with this collection as its sourceSystem.out.println("\n==> collection stream() util....");crunchifyList.forEach((temp) -> {System.out.println(temp); }); }}
// java.util.ArrayListElement[] array = {newElement(1),newElement(2),newElement(3)};// 1. Most popular and accepted answerArrayList<Element> arrayList =newArrayList<Element>(Arrays.asList(array));// Next popular answerList<Element> list =Arrays.asList(array);// Cons: It is not the best, because the size of the list returned from asList() is fixed
// Method 1: Using Object[] toArray() method// (Preferred) Method 2: Using T[] toArray(T[] a)// a − This is the array into which the elements of the list are to be stored, // if it is big enough; otherwise, a new array of the same runtime type is allocated for this purpose.// java.util.ArrayList.toArray(T[])ArrayList<Integer> foo =newArrayList<Integer>();foo.add(1);foo.add(1);foo.add(2);foo.add(3);foo.add(5);Integer[] bar =foo.toArray(newInteger[foo.size()]);System.out.println("bar.length = "+bar.length);// Method 3: Using get() in for loop manually
For example, suppose thatcis aCollection. The following snippet dumps the contents ofcinto a newly allocated array ofObjectwhose length is identical to the number of elements inc.
Object[] a = c.toArray();
Suppose thatcis known to contain only strings (perhaps becausecis of typeCollection<String>). The following snippet dumps the contents ofcinto a newly allocated array ofStringwhose length is identical to the number of elements inc.
String[] a = c.toArray(new String[0]);
Sliding Window
A sliding window is an abstract concept commonly used in array/string problems. A window is a range of elements in the array/string which usually defined by the start and end indices, i.e. [i,j) (left-closed, right-open). A sliding window is a window "slides" its two boundaries to the certain direction. For example, if we slide [i, j)to the right by 11 element, then it becomes [i+1, j+1) (left-closed, right-open).
Prefix Sum
Prefix sum 数组的 local / global 通用模板,求 min / max 皆可,使用时需要注意初始条件以及顺序: