数据结构与算法
专栏算法
码农渔夫
我是一名新时代广深漂农民工,擅长Go、K8S、gRPC等相关技术。
2023年开始,已全面拥抱Rust高性能,All in AI大模型,期待!
路漫漫其修远兮,吾将上下而求索。有空来我知识星球逛逛:Meta-Go笔记(免费)
展开
-
LeetCode-144 迭代遍历二叉树Go语言
144. 二叉树的前序遍历给你二叉树的根节点 root ,返回它节点值的 前序 遍历func inorderTraversal(root *TreeNode) (res []int) { ret := []int{} if root == nil { return ret } //定义队列 st := list.New() cur := root // for cur != nil || st.Len()>0 { if cur != nil { st.PushBack(原创 2022-01-17 18:00:48 · 4070 阅读 · 0 评论 -
LeetCode算法笔记
1、认识复杂度、对数器、二分法与异或运算(1)复杂度常见常数时间操作:常见的算术运算(+、-、*、/、%等)常见的位运算(>>>、>>、<<、|、&、^等)赋值、比较、自增、自减操作等数组寻址操作选择排序public class Code01_SelectionSort { public static void selectionSort(int[] arr){ if (arr == null || arr.len原创 2021-11-30 00:22:04 · 681 阅读 · 0 评论 -
面试被要求手写LRU 缓存机制算法,使用LinkedHashMap实现
方式2:面试官说,不允许使用LinkedHashMap,请你手写一个。你是否可以在 O(1) 时间复杂度内完成这两种操作?这是力扣题,官网地址:146. LRU 缓存机制public class LRUCache_2 { /** * map负责查找,构建一个虚拟的双向链表,它里面安装的就是一个Node节点,作为数据载体 * 1,构建一个Node节点,作为数据载体 * @param <K> * @param <V> *原创 2021-10-16 21:00:29 · 343 阅读 · 0 评论 -
LeetCode第349题·两个数组的交集
349. 两个数组的交集官网地址给定两个数组,编写一个函数来计算它们的交集。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[9,4]说明:输出结果中的每个元素一定是唯一的,我们可以不考虑输出结果的顺序。public class LeeTCode349 { public int[] intersection(int[] nums1,原创 2021-10-14 19:14:07 · 161 阅读 · 0 评论 -
Java二分查找(12)
二分查找1、概念对于区间[a,b]上连续不断且f(a)⋅f(b)<0的函数y=f(x),通过不断地把函数f(x)的零点所在的区间一分为二,使区间的两个端点逐步逼近零点,进而得到零点近似值的方法叫二分法。2、思路分析首先确定该数组的中间的下标mis=(left+right)/2然后让需要查找的数findVal和arr[mid]比较2.1 findVal>arr[mid],则查找的数在mid右边,需要递归向右查找(right不变,left = mid + 1)2.2 f原创 2020-08-06 15:09:33 · 246 阅读 · 0 评论 -
Java顺序查找(11)
1、顺序(线性)查找public class SeqSearch1 { /** * 这里是实现线性查找是找到 一个满足条件的值,就返回 * @param arr * @param value * @return */ public static int seqSearch(int[] arr,int value){ //线性查找是逐一对比,发现有相同值就返回下标 int len = arr.length;原创 2020-08-06 15:08:48 · 178 阅读 · 0 评论 -
Java插入排序(10)
插入排序1、概述插入排序属于内部排序法,是对于欲排序的元素以插入的方式寻找该元素的适当位置,以达到排序的目的。2、插入排序思想插入排序基本思路:是把n个待排序的元素看成为一个有序和一个无序表,开始时有序中包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序中取出第一个元素,把它的排序码依次与有序元素排序码比较,然后将它插入到有序表中的适当位置,就成为了新的有序表。(稳定)3、代码演示public class InsertSort2 { //插入排序 public sta原创 2020-08-06 15:08:07 · 160 阅读 · 0 评论 -
二叉树(8)
二叉树1、二叉树介绍二叉树(Binary Tree)是由n个结点组成的集合,该集合要么是空集合,要么是一个由根结点和两颗互不相交的二叉树组成。2、二叉树特点1)每个结点最多有两颗子树2)左子树与右子树是有顺序的3)即使树中的某个结点只有一个子树,也是区分左子树与右子树的3、二叉树的五种基本形态1)空二叉树2)只有一个结点的二叉树3)根结点只有左子树4)根结点只有右子树5)根结点即有左子树又有右子树4、特殊二叉树1)斜树:所有结点都有左子树的二叉树称为左斜树,所有结点都保佑原创 2020-08-06 15:06:44 · 275 阅读 · 0 评论 -
数据结构哈希表(6)
哈希表(散列表)1、面试题要求当有新员工来报道时,要求将该员工的信息加入(ID,性别,年龄,地址等),当输入该员工的ID时,要求查找到该员工的所有信息。说明:不使用数据库,尽量节省内存,时间越快越好。2、回顾数组&链表数组:寻找容易,插入和删除困难链表:寻找困难,插入和删除容易3、哈希表支持基本操作add(k key, v value)将一对新的键值对加入哈希表get(k key)通过特定的关键字拿到对应的数值remove(k key)通过k删除哈希表中的键值对getSi原创 2020-08-06 15:04:13 · 123 阅读 · 0 评论 -
数据结构双链表(5)
双向链表1、单链表&双链表区别单向链表,在查找的方向只能是一个方向,而双向链表可以向前或者向后查找单向链表不能自我删除,需要靠辅助节点。而双向链表能自我删除2、分析双向链表的遍历,添加,删除的操作思路1)遍历方式和单链表一样,可以向前也可以向后查找2)添加(默认添加到双向链表的最后先找到双向链表的最后这个节点temp.next = newHeroNodenewHeroode.pre = temp3)修改思路和单链表一样4)删除因为双向链表,因此可以实现自原创 2020-08-06 15:03:01 · 104 阅读 · 0 评论 -
数据结构链表(4)
链表(Linked List)1、数组的特点内存地址连续2、数组优缺点优点:数据是存放在一个连续的内存地址上,查找效率比较高缺点:在改变数据个数的时如:增加,插入,删除效率比较低3、链表数据在内存中可以在任意位置,通过引用来关联数据4、链表优缺点优点:任意位置插入元素和删除元素的速度快,时间复杂度为O(1)内存利用率高,不会浪费内存链表的空间大小不固定,可以动态拓展缺点:随机访问效率低,时间复杂度为0(N)。(需要从第一个数据开始找起,依次往后遍历)5、小结链表是以将节原创 2020-08-06 15:02:12 · 129 阅读 · 0 评论 -
数据结构队列Queue(3)
队列1、队列特点队列简称为队。也是一种受限的线性表,只允许在线性表的一端进行插入,而在表的另一端进行删除。(遵循:先进先出FIFO)插入数据的一端为称为队尾(rear),删除数据的一端称为队首(front)队列抽象对象类型定义:数据对象:D={a0,a1…an,ai}数据关系R:{<ai,ai+1>}数据操作:getSize();返回元素个数isEmpty();//判断是否为空enQueue(e);入队deQueue();出队2、队列的顺序存储实现使用数组实现队原创 2020-08-06 15:01:01 · 274 阅读 · 0 评论 -
数据结构栈stack(2)
栈(stack)1、前言栈是一个种线性结构,非常重要。遵循“先进后出”的有序列表栈是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入、删除的一端,为变化的一端,称为栈顶(Bottom)。2、栈应用场景1)子程序的调用:在跳往子程序前,会先将下一个指令的地址存到堆栈中,直到子程序执行完后再将地址取出,以回到原来的程序中。2)处理递归调用:和子程序的调用类似,只是除了储存下一个指令的地址外,也将参数、区域变量等数据存入堆栈中。3)表达式的转换[中缀表达式原创 2020-08-06 15:00:01 · 278 阅读 · 0 评论 -
数据结构前言(1)
1、前言数据结构是一种特殊的组织和存储数据的方式,可以使我们可以更高效地对存储的数据执行操作。数据结构在计算机科学和软件工程领域具有广泛而多样的用途。(7月26日)2、数据结构数组、队列、链表、栈、哈希表、二叉树、Trie树、图算法:递归、排序、二分查找、搜索、哈希算法、贫心算法、分治算法、回溯算法、动态规划、字符串匹配算法3、数组数组里的数据是按顺序排列的,每一个元素都有一个下标,标明它在数组中的位置。4、链表链表中的数据呈线性排列,每个数据都有一个指针,指向下一个数据的内存地址原创 2020-08-06 14:58:41 · 313 阅读 · 0 评论 -
Java选择排序(9)
不知不觉,今年已经大半年 时间就过去了,很多公司秋招已经开始了,然后数据结构 与算法就是公司常拿来考察同学们的基础,今天我们一起来学习Java中最简单的算法,叫选择排序算法。正文选择排序算法,是一种简单直观的排序算法,它的思路是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。但是注意选择排序它是不稳定的排序方法的。代码演示package com.mark.algorithm;import java.util.Arrays;/**原创 2020-07-15 16:51:27 · 117 阅读 · 0 评论