Grind 75+
Last updated
Was this helpful?
Last updated
Was this helpful?
More than .
Here is the common syntax in JDK, C++ STL and Python core module.
Note that in Python NumPy is required for array type.
CREATE
// c++
int a[3] = {0}; // init with default value, same as `int a[3] = {};` or `int a[3]{}` or `int a[3]{0}`
int length = 3; // not a constant
int a[length]; // cannot init with default value when the length is not a constant
std::fill(a, a+length, 1); // init with default value using std::fill()
int a[] = {1, 1}; // init with length 2 and default values as 1
// java
int[] a = new int[3]; // init with default value 0 for int
int[] a = new int[] {1, 1, 1}; // init with length 3 and default values as 1
int[] a = {1, 2, 3};
# python
import numpy as np
a = np.zeros(3) # init with default value 0 for int
a = np.array([1, 1, 1]) # int with default values
READ
// c++
int a[] = {1, 2, 3};
int size = sizeof(a) / sizeof(a[0]);
// classic
for (int i = 0; i < size; i++) {
cout<< a[i] << endl;
}
// range-based for loop
for (auto& e : a) {
cout<< e << endl;
}
// iterator
for (auto it = std::begin(a); it != std::end(a); ++it) {
cout << *it << endl;
}
// algorithm, note here the output array is also a
std::transform(std::begin(a), std::end(a), std::begin(a), [](int x) {
cout << x << endl;
return x;
});
// java
int[] a = {1, 2, 3};
// classic
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
}
// we have to transform it to list to use iterator
Iterator<Integer> it = Arrays.asList(a).iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
// or use stream api
a = IntStream.of(numbers).map(x -> {
System.out.println(x);
return x;
}).toArray();
MODIFY
// c++
int a[3] = {0}; // {0, 0, 0}
std::fill(a, a+3, 1); // {1, 1, 1}
// java
int[] a = new int[3];
Arrays.fill(a, 1); // {1, 1, 1}
# python
a = np.array([0, 0, 0])
a.fill(1) # {1, 1, 1}
SIZE
// c++
int a[6]{};
int length = sizeof(a) / sizeof(a[0]);
// java
int[] a = new int[6];
int length = a.length;
# python
import numpy as np
a = np.zeros(6)
length = len(a)
SORT
// c++
int a[] = {3, 2, 1};
std::sort(a, a+3); // {1, 2, 3}
std::sort(arr, arr + size, [](int a, int b) {
return a > b; // Custom comparison logic for descending order
}); // {3, 2, 1}
std::sort(std::begin(a), std::end(a)); // {1, 2, 3}
std::sort(std::begin(a), std::end(a), [] (int a, int b) {
return a > b;
}); // {3, 2, 1}
// java
int[] a = {3, 2, 1};
// !! you cannot apply the comparator to a
Arrays.sort(a); // {1, 2, 3}
// Note it's important to note that Collections.reverseOrder() cannot be directly applied to primitive arrays (like int[]). Instead, you need to use wrapper classes (like Integer[]) for this purpose.
Integer[] arr = {1, 2, 3};
Arrays.sort(arr, Collections.reverseOrder()); // {3, 2, 1}
// stream API
a = IntStream.of(a).sorted().toArray();
a = IntStream.of(a).boxed().sorted(Comparator.reverseOrder()).mapToInt(i -> i).toArray();
# python
import numpy as np
a = np.array([3, 1, 2])
np.sort(a)
a = np.sort(a)[::-1] # create a new array
a[::-1].sort() # sort in place
MAX / MIN
// c++
int a[] = {1, 2, 3};
int max = *std::max_element(a, a+3);
int min = *std::min_element(a, a+3);
// java
int[] a = {1, 2, 3};
int max = Arrays.stream(a).max().getAsInt(); // note that stream may auto box the int to Integer
int max = Arrays.stream(a).max().orElse(Integer.MIN_VALUE); // note that in the end it will auto unbox the Integer to int
int min = Arrays.stream(a).min().getAsInt();
int min = Arrays.stream(a).min().getAsInt();
# python
import numpy as np
a = np.array([1, 2, 3])
max = np.max(a)
min = np.min(a)
BINARY SEARCH
// c++
int a[] = {2, 3, 4, 10, 10, 10, 40};
bool found = std::binary_search(a, a + n, 10); // true
// lower_bound finds the first position where the value could be inserted without violating the order,
// while upper_bound finds the last position where the value could be inserted without violating the order.
auto it = std::lower_bound(a, a + n, 10); // element >= 10, (it - a) == 3
if (it != a + n && *it == key) {
// found
} else {
// not found
}
auto it2 = std::upper_bound(a, a+n, 10); // element > 10, (it - a) == 6
if (it2 != a + n && *it2 == key) {
// found
} else {
// not found
}
// java
int result = Arrays.binarySearch(arr, key);
if (result >= 0) {
System.out.println("Element found at index: " + result);
} else {
int insertPos = ~result;
System.out.println("Element not found, insert position is: " + insertPos);
}
# python
import numpy as np
a = np.array([1, 2, 2, 3, 3, 3, 4, 5, 6, 6])
left_index = np.searchsorted(arr, 3, side='left', sorter=None) # 3, it returns the index of the first suitable location found
right_index = np.searchsorted(arr, 3, side='right') # 6, it returns the index of the last suitable location
#include <iostream>
#include <cstring>
#include <string>
int main() {
// Using std::string
std::string greeting = "Hello";
greeting += ", World!"; // Concatenation
std::cout << greeting << std::endl; // Output: Hello, World!
// Finding substring
size_t pos = greeting.find("World");
if (pos != std::string::npos) {
std::cout << "'World' found at position: " << pos << std::endl;
}
// Replacing substring
greeting.replace(pos, 5, "C++");
std::cout << greeting << std::endl; // Output: Hello, C++!
// Getting length of the string
std::cout << "Length of greeting: " << greeting.length() << std::endl;
// Using C-style strings
char cstr[100] = "Hello";
strcat(cstr, ", World!");
std::cout << cstr << std::endl; // Output: Hello, World!
return 0;
}
CREATE
// c
char cs[] = "hello world"; // c-style string
// c++
std::string s = "hello world";
std::stringstream ss;
ss << "Hello " << "World";
s = ss.str();
const char* cs = s.c_str(); // string to c-style string
// java
String s = "a";
String s1 = "a"; // String is a special semi-singleton class in Java, here s == s1 and s.equals(s1)
String s2 = new String("a"); // here s != s2 but s.equals(s2)
char[] cs = s.toCharArray();
char char = cs[0]; // 'a'
char char2 = s.charAt(0); // 'a'
StringBuilder sb = new StringBuilder("hello "); // StringBuilder is not thread-safe
sb.append("world");
String s = sb.toString(); // "hello world"
StringBuffer sb = new StringBuffer("hello "); // StringBuffer is thread-safe
sb.append("world");
String s = sb.toString(); // "hello world"
# python
s = "a"
s1 = 'a'
s2 = """
hello world
"""
READ
// c
char cs[] = "hello world"; // c-style string
for (int i = 0; i < strlen(cs); i++) {
cout << cs[i] << endl;
}
// c++
string s = "hello world";
for (char c : s) {
cout << c << endl;
}
String s = "Hello World";
for (char c : s.toCharArray()) {
System.out.print(c);
}
MODIFY
// c
char cs[] = "hello world"; // c-style string
char destination[50]; // Ensure destination is large enough
strcpy(destination, cs);
strncpy(destination, source, 5); // Copy only the first 5 characters
const char* append = "!";
strcat(destination, append); // "hello world!"
destination[0] = 'H'; // "Hello world!"
// c++
string s = "hello world";
s[0] = 'H'; // "Hello world"
string sub = s.substr(6, 5); // substr starting from index 6 and length is 5
string append = "!";
string d = s + append; // "Hello world!"
string d = s.append(append); // "Hello world!"
LENGTH
// c
char cs[] = "hello world"; // c-style string
size_t size = strlen(cs); // size == 11; note that size_t is platform-dependent
// c++
string s = "hello world";
size_t size = s.size();
size_t size = s.length(); // inter-changable
ITERATOR
// c++
String s = "hello world!";
std::string::iterator it;
string t = "world";
it = std::search(s.begin(), s.end(), t.begin(), t.end()); // the algorithm use == to compare which is case-sensitive
if (it != s.end()) {
std::string::difference_type diff = it - s.begin();
// If the substring is found, we print its characters by iterating from the it iterator until the end of the string s.
cout << *it << endl; // "world!"
} else {
cout << "not found" << endl;
}
SORT
// c++
std::string str = "Hello, World!";
std::sort(str.begin(), str.end()); // !,HWdellloor, case-sensitive ASC
auto caseInsensitiveCompare = [](char a, char b) {
return std::tolower(a) < std::tolower(b);
};
std::sort(str.begin(), str.end(), caseInsensitiveCompare);
SEARCH
// c++
String s = "hello world!";
size_t pos = s.find('h'); // find the first 'h' in string, return 0
size_t pos = s.find('l', 3); // find the first 'l' in string, starting from index 3, return 3
size_t pos = s.find('z'); // return std::string::npos, which is defined as size_t(-1), which represents the largest value that can be represented by `size_t` type
string t = "world";
size_t pos = s.find(t);
if (pos != std::string::npos) {
// Print the found substring using the found index
std::cout << "Found substring: " << s.substr(found, findStr.length()) << std::endl; // "world"
} else {
cout << "not found" << endl;
}
// c++
int number;
std::cout << "Enter a number: ";
std::cin >> number; // Reads an integer from stdin
std::cout << "You entered: " << number << std::endl;
std::string line;
std::cout << "Enter a line of text: ";
std::getline(std::cin, line); // Reads an entire line from stdin
std::cout << "You entered: " << line << std::endl;
std::string line;
std::cout << "Enter lines of text (empty line to stop):" << std::endl;
while (std::getline(std::cin, line) && !line.empty()) {
std::cout << "You entered: " << line << std::endl;
}
// Redirect stdin to a file
freopen("input.txt", "r", stdin);
std::string line;
while (std::getline(std::cin, line)) {
std::cout << "Read from file: " << line << std::endl;
}
// java
Scanner scanner = new Scanner(System.in);
System.out.print("Enter a string: ");
String myString = scanner.nextLine(); // Read a string
System.out.print("Enter an integer: ");
int myInt = scanner.nextInt(); // Read an integer
scanner.close(); // Close the scanner
System.out.println("You entered: " + myString);
System.out.println("You entered: " + myInt);
Note that in Python the default list is not backed by array.
Note that in C++ begin()
and end()
provide iterators to the first and one-after-last element of the vector. and rbegin()
and rend()
provide iterators in reverse order.
CREATE
// c++
vector<int> v; // empty
vector<int> v(3); // init with a capacity of 6, not emtpy; [0, 0, 0]
vecotr<int> v(3, 1); // init with a capacity of 6 and default value as 1; [1, 1, 1]
// java
ArrayList<Integer> a = new ArrayList<>();
ArrayList<Integer> a = new ArrayList<>(3); // init with a capacity of 3, but it's empty; []
int[] tmp = new int[3];
Arrays.fill(tmp, 1);
ArrayList<Integer> a = new ArrayList<>(Arrays.asList(tmp)); // [1, 1, 1]
READ
// c++
vecotr<int> v(3, 1); // [1, 1, 1]
v.front(); // or v[0]
v.back(); // or v[v.size()-1]
// java
int[] tmp = new int[3];
ArrayList<Integer> a = new ArrayList<>(tmp);
a.get(0); // first element
a.get(a.size()-1); // last element
MODIFY
// c++
vecotr<int> v(3, 1); // [1, 1, 1]
v.push_back(2); // [1, 1, 1, 2]
v.pop_back(); // [1, 1, 1]
v.insert(v.begin(), 2); // [2, 1, 1, 1], insert at the front
v.insert(v.begin()+1, 3); // [2, 3, 1, 1, 1]
v.insert(v.end(), 5); // [2, 3, 1, 1, 1, 5], insert at the end, same as `v.push_back(5)`
vector<int> v2(2, 2); // [2, 2]
v.insert(v.end(), v2.begin(), v2.end()); // [2, 3, 1, 1, 1, 5, 2, 2]
int a[2] = {3, 3}; // [3, 3]
v.insert(v.end(), std::begin(a), std:;end(a)); // [2, 3, 1, 1, 1, 5, 2, 2, 3, 3]
v.insert(v.end(), 2, 4); // [2, 3, 1, 1, 1, 5, 2, 2, 3, 3, 4, 4], insert 4 twice
// java
int[] tmp = new int[] {1, 1, 1};
ArrayList<Integer> a = new ArrayList<>(tmp); // [1, 1, 1]
a.add(2); // [1, 1, 1, 2]
a.remove(a.size()-1); // [1, 1, 1]
a.add(0, 2); // [2, 1, 1, 1], insert at the front
a.add(1, 3); // [2, 3, 1, 1, 1]
// note that if you run `a.add(4, 3)` it will throw IndexOutOfBoundsException,
// this is because valid indices for an ArrayList are from 0 to size() - 1.
a.add(5); // [2, 3, 1, 1, 1, 5], insert at the end
ArrayList<Integer> a2 = new ArrayList<>(new int[] {2, 2}); // [2, 2]
a.addAll(a2); // [2, 3, 1, 1, 1, 5, 2, 2]
int[] tmp = new int[] {3, 3};
a.addAll(Arrays.asList(tmp)); // [2, 3, 1, 1, 1, 5, 2, 2, 3, 3]
SIZE
// c++
vector<int> v(3, 1); // [1, 1, 1]
int s = v.size(); // s == 3
v.resize(5, -1); // [1, 1, 1, -1, -1]
v.resize(3, -2); // [-2, -2, -2]
v.resize(6); // [-2, -2, -2, 0, 0, 0]
bool b = v.empty(); // b == false
// java
int[] tmp = new int[3];
ArrayList<Integer> a = new ArrayList<>(tmp);
int s = a.size(); // s == 3
bool b = a.isEmpty(); // b == false
ITERATOR
// c++
vector<int> v(3, 1);
for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
cout << *it << endl;
}
// java
final List<Integer> a = new ArrayList<>();
a.add(1);
a.add(1);
a.add(1);
final ListIterator<Integer> it = a.listIterator();
while (it.hasNext()) {
System.out.print(it.next());
}
SORT
BINARY SEARCH
MATH
// c++
//java
// Comparable
// Comparator
// c++
std::unordered_map<char, int> myMap;
// Accessing a key that doesn't exist yet,
// try to access a key that doesn't exist, the map will automatically initialize the value for that key to the default value for the value type, which is 0 in the case of int.
std::cout << "Value of 'a': " << myMap['a'] << std::endl; // Output: 0
char key = 'a';
std::unordered_map<char, int>::iterator it = myMap.find(key)
if (it != myMap.end()) {
// find it
} else {
// not find it
}
Map<String, String> map = new HashMap<>();
for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println(entry.getKey() + "/" + entry.getValue());
}
Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, String> entry = it.next();
System.out.println(entry.getKey() + "/" + entry.getValue());
}
map.forEach((k, v) -> System.out.println(k + "/" + v));
map.entrySet().stream().forEach(e -> System.out.println(e.getKey() + "/" + e.getValue()));
final String key = "a";
if (map.contains(key)) {
// contains key
} else {
// not contians key
}
#include <iostream>
#include <queue>
int main() {
std::queue<int> myQueue;
// Enqueue elements
myQueue.push(10);
myQueue.push(20);
myQueue.push(30);
// Display front element
if (!myQueue.empty()) {
std::cout << "Front element: " << myQueue.front() << std::endl; // Output: 10
}
// Update front element by removing it and adding a new one
if (!myQueue.empty()) {
int oldValue = myQueue.front();
std::cout << "Updating front element: " << oldValue << " to 25." << std::endl;
myQueue.pop(); // Remove old value
myQueue.push(25); // Add new value
}
// Display all elements in the queue after update
std::cout << "Elements in queue after update: ";
while (!myQueue.empty()) {
std::cout << myQueue.front() << " "; // Output: 20 25 30
myQueue.pop();
}
return 0;
}