LeetCode刷题已经有一段时间了,作为一名非科班选手,从一开始对数据结构的一窍不通,到现在逐渐能熟练使用一些数据结构解题。
现在将平时积累的一些刷题常用数据结构分享给大家。可供入门/新手/非科班选手参考。
集合
HashSet
- set常常在去重相关的题目中用到
HashSet<Integer> set = new HashSet<>();//新建一个set集合,常常在去重的题目中
set.add() //往set中添加元素
set.remove() //set中去除元素
set.contains() //常用于判断set中是否包含某个元素
set.size() //set的长度,大小
for(int i:set1){ //遍历set的一种方式
}
HashMap
- HashMap常常在需要键值对映射的题目中用到
Map<Integer,Integer> map = new HashMap<>();
map.put(key,value);//map中放入 key-value键值对
map.get(key); //获取某个key对应的value
map.containsKey(key) //经常用于判断,是否包含某个key值
栈
流行的栈写法
Deque<Integer> stack = new LinkedList<>();
//官方已经不建议用stack()来实现栈,当前用LinkedList<>(); 实现
res[index++] = stack.pop();
stack.removeLast();
stack.peek()
补充一个写法
- 这个写法也是由
LinkedList<>()
实现。
LinkedList<Integer> path = new LinkedList<>();
path.removeLast();//似乎只有上面这种初始化方式才可以用removeLast()方法
队列
#优先队列
- 这里还附加了一个比较器,(利用lambda表达式重写compare方法) o1-o2代表升序,o2-o1代表降序
PriorityQueue<ListNode> pq = new PriorityQueue<>(new Comparator<ListNode>(){
@Override
public int compare(ListNode o1,ListNode o2){
return o1.val - o2.val;
}
});//注意这个序号关系,compare方法定义在Comparator里面
pq.add(list);//增
ListNode nodeNext = pq.poll();//删
字符串
- 内容比较多,有空再整理
字符串和数字转换
- 数字转字符串:
String s =valueOf(x);
另一种x+""
也可以的。 - 字符串转数字:
Interge.valueOf(s)
字符串转字符数组
- 字符串转字符数组
char[] ch = s.toCharArray();
- 把字符数组返还给字符串
return new String(ch);
集合和数组转换
- 集合转换为数组
Integer[] arr = new Integer[list.size()];
list.toArray(arr);
- 将数组转换为集合
Arrays.asList();
Arrays.asList(nums[i], nums[left], nums[right]);//将三个数字变为List集合,将数组变为List
Arrays
排序
int [] res = new int[10];
Arrays.sort(res);
StringBuilder可变长度字符串
- 可变长度字符串
StringBuilder
StringBuilder[] sb = newStringBuilder[长度];//可变长度字符串数组
StringBuilder stringBuilder = new StringBuilder();//
StringBuffer sb = new StringBuffer();//安全性更高
sb.length();//长度
sb.append("%20"); //添加元素
return sb.toString();//转换回String
sb.setCharAt(下标,值);//设置某个下标位置的值
substring
- 字符串截取
substring
- 前闭后开