竞赛编程
格式化打印
|  |  | 
- 整数- %d:打印单个整数。
- %Nd:固定长度为 N,右对齐,填充空格,不截取。- ("%5d", -12) == "^^-12"。
- %-Nd:固定长度为 N,左对齐,填充空格,不截取。- ("%-5d", -12) == "-12^^"。
- %0Nd:固定长度为 N,右对齐,填充 0,不截取。- ("%05d", -12) == "-0012"。
 
- 浮点数- %f:打印单个浮点数
 
- 字符- %c:打印单个字符
 
- 布尔值- %b:打印单个布尔值
 
| 符号 | 含义 | 
|---|---|
| %c | 字符 | 
| %d | 整数 | 
| %8d | 整数,固定长度,左侧补空白字符,不会截断整数 | 
| %8d | 整数,固定长度,左侧补空白字符,不会截断整数 | 
C++
Java
I/O
读取数据
|  |  | 
打印数据
|  |  | 
重定向
|  |  | 
命令行参数
|  |  | 
字符串
构造方法
- String(byte[] bytes)
- String(byte[] bytes, int offset, int length)
- String(char[] value)
- String(char[] value, int offset, int count)
- String(StringBuffer buffer)
- String(StringBuilder builder)
常用方法
- int length():返回字符串长度。
- boolean isEmpty():字符串是否为空。
- String concat(String str):将 str 拼接到字符串末尾,等同于 +=。
- String repeat(int count):返回重复 count 次得到的字符串。
比较
- boolean equals(Object anObject):字符串是否相等。
- boolean equalsIgnoreCase(String anotherString):字符串是否相等,忽略大小写。
- boolean contentEquals(CharSequence cs):字符串是否相等(可比较 String、StringBuilder、StringBuffer)。
- int compareTo(String anotherString):比较字符串,小于返回 -1,相等返回 0,大于返回 1。
- int compareToIgnoreCase(String str):比较字符串,忽略大小写,小于返回 -1,相等返回 0,大于返回 1。
- boolean startsWith(String prefix)
- boolean startsWith(String prefix, int toffset)
- boolean endsWith(String suffix)
- boolean matches(String regex)
- boolean contains(CharSequence s)
- boolean isBlank():字符串是否为空白(由空格、制表符、换行符、回车符构成)。
查找
- char charAt(int index):返回索引 index 处的字符。
- int indexOf(int ch):返回字符 ch 第一次出现的索引,未找到返回 -1。
- int indexOf(int ch, int fromIndex):返回字符 ch 从 fromIndex 处第一次出现的索引,未找到返回 -1。
- int indexOf(String str)::返回字符串 str 第一次出现的索引,未找到返回 -1。
- int indexOf(String str, int fromIndex):返回字符串 str 从 fromIndex 处第一次出现的索引,未找到返回 -1。
- int lastIndexOf(int ch):返回字符 ch 最后一次出现的索引,未找到返回 -1。
- int lastIndexOf(int ch, int fromIndex):返回字符 ch 从 fromIndex 处最后一次出现的索引,未找到返回 -1。
- int lastIndexOf(String str):返回字符串 str 最后一次出现的索引,未找到返回 -1。
- int lastIndexOf(String str, int fromIndex):返回字符串 str 从 fromIndex 处最后一次出现的索引,未找到返回 -1。
替换
- String replace(char oldChar, char newChar):替换所有指定字符。
- String replace(CharSequence target, CharSequence replacement):替换所有字符串。
- String replaceAll(String regex, String replacement)
- String replaceFirst(String regex, String replacement)
分割/合并
- String[] split(String regex):按 regex 分割字符串,支持正则表达式。
- String[] split(String regex, int limit)
- static String join(CharSequence delimiter, CharSequence... elements)
- static String join(CharSequence delimiter, Iterable<? extends CharSequence> elements)
处理
- String toLowerCase()
- String toUpperCase()
- String strip()
- String stripLeading()
- String stripTrailing()
- String trim()
子串
- String substring(int beginIndex):返回子串 s[beginIndex, n)。
- String substring(int beginIndex, int endIndex):返回子串 s[beginIndex, endIndex)。
类型转换
- static String valueOf(T t):基本数据类型 转 String。
- static String valueOf(char[] data):char[] 转 String。
- static String valueOf(char[] data, int offset, int count):c[offset, offset + count) 转 String。
- char[] toCharArray():String 转 char[]。
- void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin):String 转 char[]。
- static String format(String format, Object... args):生成指定格式 String。
字符判断
- static boolean isDigit(char ch)
- static boolean isLetter(char ch)
- static boolean isLetterOrDigit(char ch)
- static boolean isWhitespace(char ch)
- static boolean isLowerCase(char ch)
- static boolean isUpperCase(char ch)
- static char toLowerCase(char ch)
- static char toUpperCase(char ch)
数组
|  |  | 
变长数组
|  |  | 
链表
|  |  | 
栈
|  |  | 
API 1:
- boolean offerLast(E e):向栈顶添加元素。
- E pollLast():从栈顶删除元素并返回该元素,若栈为空返回 null。
- E peekLast():返回栈顶元素,若栈为空返回 null。
API 2:
- void push(E e):向栈顶添加元素。
- E pop():从栈顶删除元素并返回该元素,若栈为空抛出- java.util.NoSuchElementException。
- E peek():返回栈顶元素,若栈为空返回 null。
队列
普通队列
|  |  | 
- boolean offer(E e):添加元素到队尾。
- E poll():从队头删除元素并返回该元素,若队列为空返回 null。
- E peek():返回队头元素,若队列为空返回 null。
- int size():返回队列中元素数量。
- boolean isEmpty():返回队列是否为空。
|  |  | 
双端队列
|  |  | 
- boolean offerFirst(E e):队首添加元素。
- boolean offerLast(E e):队尾添加元素。
- E pollFirst():删除队首元素并返回,若队列为空返回 null。
- E pollLast():删除队尾元素并返回,若队列为空返回 null。
- E peekFirst():返回队首元素,若队列为空返回 null。
- E peekLast():返回队尾元素,若队列为空返回 null。
哈希表
无序哈希表
初始化
|  |  | 
添加
- V put(K key, V value)- key 存在:覆盖旧值,返回旧值。
- key 不存在:添加元素,返回 null。
 
|  |  | 
- V compute(K key, BiFunction<? super K, ? super V,? extends V> remappingFunction)- key 存在:若新值为 null 则删除元素,返回 null;若新值不为 null 则覆盖旧值,返回新值。
- key 不存在:若新值为 null 则返回 null;若新值不为 null 则添加元素,返回新值。
 
|  |  | 
- V putIfAbsent(K key, V value)- key 存在:返回旧值。
- key 不存在:添加元素,返回 null。
 
|  |  | 
- V computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction)- key 存在:返回旧值。
- key 不存在:若新值为 null 则返回 null;若新值不为 null 则添加元素,返回新值。
 
|  |  | 
- V computeIfPresent(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)- key 存在:覆盖旧值.
- key 不存在:返回 null。
 
|  |  | 
- void putAll(Map<? extends K, ? extends V> m):添加另一个 Map 中的所有元素。
删除
- V remove(Object key):删除元素。key 存在则返回旧值;key 不存在则返回 null。
- void clear():清空 Map。
- boolean remove(Object key, Object value):删除指定键值对。
查询
- V get(Object key):key 存在返回对应的值;key 不存在返回 null。
- V getOrDefault(Object key, V defaultValue):key 存在返回对应的值;key 不存在返回 defaultValue。
- boolean containsKey(Object key):是否存在指定 key。
- boolean containsValue(Object value):是否存在指定 value。
- int size():大小。
- boolean isEmpty():是否为空。
遍历
- Set<K> keySet():返回所有 key 的集合(非副本)。该集合支持删除元素,不支持添加元素。
- Set<Map.Entry<K,V>> entrySet():返回所有键值对的集合(非副本)。该集合支持删除元素,不支持添加元素。
- Collection<V> values():返回所有 value 的集合(非副本)。该集合支持删除元素,不支持添加元素。
- void forEach(BiConsumer<? super K,? super V> action):增强 for 循环。
|  |  | 
速度:
- entrySet > keySet
- 迭代器 > 增强 for 循环
排序
|  |  | 
有序哈希表
初始化
- TreeMap(Comparator<? super K> comparator):自定义排序规则。
|  |  | 
查询
- K floorKey(K key):返回最后一个小于等于 key 的键,若无返回 null。
- K ceilingKey(K key):返回第一个大于等于 key 的键,若无返回 null。
- K lowerKey(K key):返回最后一个小于 key 的键,若无返回 null。
- K higherKey(K key):返回第一个大于 key 的键,若无返回 null。
- K firstKey():返回第一个键,若空抛出- java.util.NoSuchElementException。
- K lastKey():返回最后一个键,若空抛出- java.util.NoSuchElementException。
- Map.Entry<K,V> floorEntry(K key):返回最后一个小于等于 key 的键值对,若无返回 null。
- Map.Entry<K,V> ceilingEntry(K key):返回第一个大于等于 key 的键值对,若无返回 null。
- Map.Entry<K,V> higherEntry(K key):返回最后一个小于 key 的键值对,若无返回 null。
- Map.Entry<K,V> lowerEntry(K key):返回第一个大于 key 的键值对,若无返回 null。
- Map.Entry<K,V> firstEntry():返回第一个键值对,若空返回 null。
- Map.Entry<K,V> lastEntry():返回最后一个键值对,若空返回 null。
|  |  | 
遍历
- NavigableSet<K> descendingKeySet()
- NavigableMap<K,V> descendingMap()
|  |  | 
集合
无序集合
初始化
添加
删除
查询
遍历
排序
有序集合
初始化
- TreeSet(Collection<? extends E> c):使用其他容器进行初始化。
- TreeSet(Comparator<? super E> comparator):自定义排序规则。
|  |  | 
查询
- E floor(E e):返回最后一个小于等于 e 的元素,若无返回 null。
- E ceiling(E e):返回第一个大于等于 e 的元素,若无返回 null。
- E lower(E e):返回最后一个小于 e 的元素,若无返回 null。
- E higher(E e):返回第一个大于 e 的元素,若无返回 null。
- E first():返回第一个元素,若无抛出- java.util.NoSuchElementException。
- E last():返回最后一个元素,若无抛出- java.util.NoSuchElementException。
- E pollFirst():删除并返回第一个元素,若无返回 null。
- E pollLast():删除并返回最后一个元素,若无返回 null。
使用同 TreeMap。
遍历
- Iterator<E> descendingIterator()
- NavigableSet<E> descendingSet()
使用同 TreeMap。
优先队列
常量
|  |  | 
类型转换
|  |  | 
算法模板
数据规模
getMin 功能的栈
- 两个栈:一个存元素,一个存最小值。最小值可以同步存,也可以不同步。
- 一个栈:捆绑元素和最小值。
|  |  | 
两个栈组成队列
|  |  | 
用递归函数和栈逆序一个栈
|  |  | 
猫狗队列
|  |  |