- 博客(7)
- 收藏
- 关注
原创 一些数据结构使用记录
优先队列 创建: PriorityQueue<int[]> pq = new PriorityQueue<int[]>(new Comparator<int[]>(){ public int compare(int[] pair1, int[] pair2){ return pair1[0] != pair2[0] ? pair2[0] - pair1[0] : pair2[1] - pair1[1]
2022-03-21 13:42:50 1427
原创 单调栈解决下一个更大元素
下一个更大元素 class Solution { public int[] nextGreaterElement(int[] nums1, int[] nums2) { HashMap<Integer,Integer> map=new HashMap<>(); Stack<Integer> s=new Stack<>(); for(int i=nums2.length-1;i>=0;i--){ //
2022-03-17 14:54:31 113
原创 算法题记录4-优先队列解决第k个最大的问题
优先队列解决第k个最大的问题 最小的k个数 经典笔试题,可以手写快排 java中提供了现成的PriorityQueue,实现起来简单,比快排慢 本题是求前k小个数,因此用容量为k的大根堆,每次poll出最大的数,那堆中保留的就是前k小。(小根堆需要把所有的元素全部入堆,就是O(NlogN),就不是O(NlogK)) public int[] getLeastNumbers(int[] arr,int k){ if(k==0) return new int[0]; //使用一个大根堆 Queue<
2022-03-14 22:20:18 1034
原创 算法题记录3-有效的括号
lc20-有效的括号 class Solution { public boolean isValid(String s) { Stack<Character> a=new Stack<>(); for(Character c:s.toCharArray()){ if(c=='('||c=='['||c=='{'){ a.push(c); }else if(!a.em
2022-03-08 22:00:26 128
原创 算法题记录2-大数相加、相乘
lc415-大数相加 class Solution { public String addStrings(String num1, String num2) { StringBuilder sb=new StringBuilder(); char[] c1=num1.toCharArray(); char[] c2=num2.toCharArray(); int i=num1.length()-1; int j=num2
2022-03-07 22:00:12 251
原创 算法题记录1--反转链表系列
第一重-简单反转链表 递归实现 递归终止条件是head到最后一个 class Solution{ pubilc ListNode reverseListNode(ListNode head){ if(head==null||head.next==null) return head; ListNode newHead = reverseListNode(head.next); head.next.next=head; head=null; return newHead; } } 第二
2022-03-07 16:35:35 215
转载 反转链表的四种实现方式
反转链表的四种实现方式 1、迭代反转链表 该算法的实现思想非常直接,就是从当前链表的首元节点开始,一直遍历至链表的最后一个节点,这期间会逐个改变所遍历到的节点的指针域,另其指向前一个节点。 具体的实现方法也很简单,借助 3 个指针即可。以图中建立的链表为例,首先我们定义 3 个指针并分别命名为 beg、mid、end。它们的初始指向如图 3 所示: 在上图的基础上,遍历链表的过程就等价为:3 个指针每次各向后移动一个节点,直至 mid 指向链表中最后一个节点(此时 end 为 NULL )。需要注意的
2020-11-09 21:31:00 707 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人