LeetCode常用数据结构总结|入门刷题必备数据结构总结|HashSet用法|HashMap用法|优先队列PriorityQueue

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
    • 前闭后开
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乘风会落雨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值