二维数组的表示方法:
1:List<List>
2:List<int[]>Day 7
键值对表示: Day 8 leetcode13
1:Map
2:利用string ,int双数组表示(利用下标I建立对应关系)
字符串和字符
字符串转字符1. 使用String.charAt(index)(返回值为char)可以得到String中某一指定位置的char。
2. 使用String.toCharArray()(返回值为char[])可以得到将包含整个String的char数组。这样我们就能够使用从0开始的位置索引来
字符转字符串:
String s = String.valueOf(‘c’);
数组和LIST
数组转List:
1:字符串String数组可以直接转化
String[] pathArr ;
List pathList = Arrays.asList(pathArr);
2:int 数组必须如下转化:或者定义为Integer num[]=new Integer
int[] src = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
Integer[] is = ArrayUtils.toObject(src);
List asList = Arrays.asList(is);
3:
List asList = Arrays.asList(num[0],num[1]);
list转数组
List<int[]> result=new LinkedList<>();
result.toArray(new int [0][]); Day 7
字符串和数字
字符串转数字: Integer.valueOf(v2[i]) 会自动去掉所有前缀 “00012”——12
快捷数字转数组:result.add(new int[]{left, right}) Day 7
快捷数字转List:result.add(Arrays.asList(nums[i],nums[low],nums[high])
数组中截取部分数字作为数组:int preorderLeft[]=Arrays.copyOfRange(preorder, 1, i+1);
排序:Day 7
Arrays.sort(Elemtype)
Arrays.sort(Elemtype,int front,int rear)
加了Comparator
例子:
int[][] intervals;
Arrays.sort(intervals,(a,b)->a[0]-b[0]);
理解为将intervals下每一个一维数组看做比较量,比较其a[0]即为第一个元素
反转:可以是数组,甚至是List<List>对内部List 进行反转。注意返回值是void(不用返回)
Collections.reverse(list);
二分详解:day 10 leetcode14
首先标准格式牢记:
三个点容易混淆
1:low <= high
2:low = middle + 1
3:high = middle - 1
while (low <= high) {
middle = (low + high) / 2;
if (isCommonPrefix(strs, middle))
low = middle + 1;
else
high = middle - 1;
}
拓展理解:
1:当给定字符序列时,二叉查找树唯一,即所有数字的查找路径已经确定。
例子:当字符序列时 1 2 3 4 5 6 7时,二叉查找树已经确定
当查找4<x<5时,会比较4-6-5序列
当查找5<x<6时,会比较4-6-5序列 其中序列值即Mid的值
2:虽然查找序列确定,但是low,high的值没有确定。
但是
若查找成功,则结束情况为low=high=mid=value
若查找失败,则结束情况low=high+1。且
在比较路径上一定存在两种情况
第一种low=high-1——>mid=low
if(a[mid]<value) 则low=mid+1=high mid=low=high
if(a[mid]>value) low =mid+1——low>high 失败
if(a[mid]<value) high=mid-1——low>high 失败
if(a[mid]>value) 则high=mid-1 ———low>high 失败
第二种:low=high
if(a[mid]<value) low=mid+1 low>high
if(a[mid]>value) high=mid-11 low>high
3:注意当确定low, high时,说明i<low和i>high的情况已经失败,删除考虑列表。
可能存在的情况是low<=i<=high
4:注意类型题目
如果是查找数组中某一个值==key【常规二分】 返回mid
如果是查找数组中奇异点,返回a[left]或者a[right]
5:若未能找到(n>=2)
若value>nums【high不动,low一直右移位】
一定有low=nums.length;
若value<nums【low不动,high一直左移位】
一定有high=-1;
若value位于nums值之间
一定有nums[high]<value<nums[low]
stack
push( num) //入栈
pop() //栈顶元素出栈
empty() //判定栈是否为空
peek() //获取栈顶元素
search(num) //判端元素num是否在栈中,如果在返回1,不在返回-1
Treeset
TreeSet set = new TreeSet<>();
boolean add(E object)
Object clone()
boolean contains(Object object)
boolean isEmpty()
E floor(E e)
E ceiling(E e)
boolean remove(Object object)
lower、floor、ceiling 和 higher 分别返回小于、小于等于、大于等于、大于给定元素的元素,如果不存在这样的元素,则返回 null。
String
char charAt(值)
char toCharArray();
int indexOf(“字符”)
String[] split(“字符”)
trim(); 删除前后空格
String substring(int beginIndex,int endIndex)
主要两种:删除字符串 str=str.substring(a,b)
获得删除的部分 return str.substring(a,b)
return str.substring(a):删除前a个字符串
boolean contains(String)
boolean startsWith(String)
boolean endsWith(String)
String replace(char old,char new)
LinkedList[注意List,ArrayList不同]
boolean add(Object element) addAll(List)
Object remove(int index)
Object get(int index)
public int size()
subList(fromIndex, toIndex)
public int indexOf(Object o),查找指定元素从前往后第一次出现的索引;
public int indexOf(Object o),查找指定元素从前往后第一次出现的索引;
注意,List也遵循先进先出,拥有队列性质 【leetcode17计算器】
Integer和Int转换:
Integer A=Integer.valueOf(a);
int a=A.intValue();
Integer[]和int[]转化
int[] arr2 = Arrays.stream(integers1).mapToInt(Integer::valueOf).toArray();
Integer[] integers1 = Arrays.stream(data).boxed().toArray(Integer[]::new);
// int[] 转 List<Integer>
List<Integer> list1 = Arrays.stream(data).boxed().collect(Collectors.toList());
// int[] 转 Integer[]
Integer[] integers1 = Arrays.stream(data).boxed().toArray(Integer[]::new);
// 前两步同上,此时是Stream<Integer>。
// 然后使用Stream的toArray,传入IntFunction<A[]> generator。
// 这样就可以返回Integer数组。
// 不然默认是Object[]。
// List<Integer> 转 Integer[]
Integer[] integers2 = list1.toArray(new Integer[0]);
// List<Integer> 转 int[]
int[] arr1 = list1.stream().mapToInt(Integer::valueOf).toArray();
// Integer[] 转 List<Integer>
List<Integer> list2 = Arrays.asList(integers1);
// String[] 转 List<String>
List<String> list3 = Arrays.asList(strings1);
// List<String> 转 String[]
String[] strings2 = list3.toArray(new String[0]);
Collections
void Collections.reverse(List list):反转
void Collections.shuffle(List list),随机排序
void Collections.sort(List list),按自然排序的升序排序
void Collections.sort(List list, Comparator c);定制排序,由Comparator控制排序逻辑
void Collections.swap(List list, int i , int j),交换两个索引位置的元素
void Collections.rotate(List list, int distance),旋转。当distance为正数时,将list后distance个元素整体移到前面。当distance为负数时,将 list的前distance个元素整体移到后面。
堆
PriorityQueue priorityQueue = new PriorityQueue<>(k + 1, (a, b) -> (a - b));
需要设置长度和Lambda表达式说明大小根堆
add,poll,peek