数据结构和算法
数据结构和算法
小镇攻城狮
吃饭的家伙要拿稳咯
展开
-
【优先队列】合并多个有序链表
原题连接【23. 合并K个升序链表】困难【786. 第 K 个最小的素数分数】困难思路优先队列# 抓住关键字:每一个链表都是有序的假设有如下3个链表1 -> 4 -> 51 -> 3 -> 42 -> 6比较每一个链表的头部元素,找到其中最小的节点,放入最终的结果中。然后依次重复上述的步骤,直到所有的链表都为null第一轮4 -> 51 -> 3 -> 42 -> 6res = [1]第二轮4 ->原创 2021-11-29 17:44:55 · 784 阅读 · 0 评论 -
【Java位运算】使用快速幂方法求指数的值
刷题是经常需要求x^y这样的值,当直接调用库函数的时候可能会超时((int)Math.pow(x,y)),这时候就需要通过快速幂的方法求值。public class Test { public static void main(String[] args) { int x = 2, y = 5; System.out.println(ksm(x, y)); } private static int ksm(int x, int y) {原创 2021-06-07 22:18:34 · 2627 阅读 · 0 评论 -
【二叉树】根据前序遍历和中序遍历构建一颗二叉树
1 相关题目剑指 Offer 07. 重建二叉树2 二叉树的定义class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; }}3 通过递归求解public TreeNode buildTree(int[] preorder, int[] inorder) { if (preorder.length == 0 || ino原创 2021-09-15 16:18:29 · 245 阅读 · 0 评论 -
【链表】反转一个链表
1 题目链接剑指 Offer 24. 反转链表1 定义链表class ListNode { int val; ListNode next; ListNode(int x) { val = x; }}2 链表反转public ListNode reverseList(ListNode head) { // 定义前中后三个变量 ListNode pre = null; ListNode cur = head; Lis原创 2021-09-15 15:30:58 · 64 阅读 · 0 评论 -
【堆】TOP K问题用堆解决
相关文章:【Java集合框架】通过Queue创建小根堆和大根堆TOP K问题指的是,在数据流中,寻找第K大的元素。通常这样的问题用堆,这个数据结构来解决。堆本质上是一个完全二叉树,分为小根堆和大根堆,堆顶元素是堆中最小或者最大的元素。非常适合用来解决TOP K问题。Java中有实现好的堆的数据结构,即PriorityQueue。例题题目描述实现一个类,求数据流中的第k大的元素参考代码(Java)class KthLargest { Queue<Integer> q原创 2021-07-01 16:09:44 · 1884 阅读 · 0 评论 -
【双指针】左右双指针查找有序数组是否存在两数之和
注意标题中提到的关键字:左右双指针;有序数组;两数之和。题目举例:已知一个递增的数组nums[],一个目标值target。判断数组中是否存在两个值nums[i],nums[j],使得nums[i]+nums[j]=target。参考代码(Java)public boolean solve(int nums[], int target) { int l = 0, r = nums.length - 1; while (l < r) { if (nu原创 2021-07-01 15:22:35 · 1794 阅读 · 0 评论 -
【二叉树】二叉树的DFS和BFS遍历
二叉树是一个非常基础的数据结构,是刷题中的老面孔了。对于常见的数据结构,如数组、链表、栈、队列、哈希表、树、堆、图等,我们要掌握它们的遍历和访问方式。二叉树通常有两种访问方式,DFS和BFS。其中DFS又分为前序、中序、后序三种方式。1 二叉树的定义(Java)二叉树在不同语言中的定义方式不一样,这里以Java为例。class TreeNode { int val; TreeNode left; TreeNode right; TreeNode() { .原创 2021-07-01 11:33:17 · 3193 阅读 · 0 评论 -
【排序】快速排序写法
同上一篇:【数据结构和算法】归并排序写法快速排序也是面试中经常考到的排序算法,下面的写法一定要很熟练。快速排序思想先从数列中取出一个数作为基准数;将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边;再对左右区间重复第二步,直到各区间只有一个数。参考代码(Java)public class Test_04 { public static void main(String[] args) { int nums[] = new int[]{1, 3, 5, 7,原创 2021-04-19 20:13:32 · 815 阅读 · 0 评论 -
【排序】归并排序写法
归并排序是面试中经常考到的排序算法,要熟练默写以下的代码import java.util.Arrays;public class Test{ public static void main(String[] args) { int a[] = new int[]{1,3,5,7,2,4,6,8}; System.out.println(Arrays.toString(a)); merge(a,0,a.length-1); Syste原创 2021-04-15 23:04:00 · 1554 阅读 · 0 评论
分享