当前位置: 首页 > news >正文

Android开发面试:数据结构与算法知识答案精解

目录

数据结构与算法

线性表

数组

链表

队列

二叉树

红黑树

哈夫曼树

排序算法

冒泡排序

选择排序

插入排序

希尔排序

堆排序

快速排序

归并排序

查找算法

线性查找

二分查找

插值查找

斐波拉契查找

树表查找

分块查找

哈希查找

动态规划算法

贪心算法

LeetCode算法题


数据结构与算法

线性表

数组

  1. 线性表是一种线性结构,它是具有相同类型的n(n≥0)个数据元素组成有限序列
  2. 描述:数组有上界和下界,数组元素在上下界内是连续的;复杂一点是多维数组和动态数组,多维数组本质上是通过一维实现,动态数组Java中实现有ArrayList和Vector
  3. 特点:数据是连续的,随机访问速度快

链表

  1. 单向链表:a、是链表的一种,它由节点组成,每个节点都包含下一个节点的指针;b、节点的链接方向是单向的;c、相对于数组来说,单链表随机访问速度较慢,但删除/添加数据效率高
  2. 双向链表:a、是链表的一种,和单链表一样,双链表也是由节点组成,每个数据结点中都有两个指针,分别指向直接后继和直接前驱;b、从双向链表中任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点,一般我们都构造双向循环链表,LinkedList实现了双链表

  1. Java中Stack(继承自Vector)实现了栈,栈中数据是按照"后进先出(LIFO, Last In First Out)"方式进出栈的,向栈中添加/删除数据时只能从栈顶进行操作
  2. 通常包括的三种操作:push向栈中添加元素、peek返回栈顶元素、pop返回并删除栈顶元素

队列

  1. 队列中数据是按照"先进先出(FIFO, First-In-First-Out)"方式进出队列的,队列只允许在队首进行删除操作,而在队尾进行插入操作,通常包括两种操作,入队列和出队列
  2. Java中Queue接口实现了队列,用的最多的是LinkedList

二叉树

  1. 包括满二叉树、完全二叉树和二叉查找树
  2. 二叉查找树:若任意节点的左子树不空,则左子树上所有结点的值均小于它根结点的值;任意节点的右子树不空,则右子树上所有结点的值均大于它根结点的值
  3. 遍历:前序、中序、后序遍历算法,也就是根结点的访问顺序,前序遍历算法是先访问根节点,然后左子树,而后右子树
  4. 深度、广度优先遍历算法:树的深度优先遍历需要用到额外数据结构栈,而广度优先遍历需要队列来辅助,深度遍历算法包括前中后序遍历算法

红黑树

  1. 定义:红黑树是特殊的二叉查找树,每个节点上都有存储位表示节点颜色,可以是红(Red)或黑(Black)
  2. 特征:a、每个节点或者是黑色,或者是红色;b、根节点是黑色;c、每个叶子节点(NIL)是黑色;d、如果一个节点是红色的,则它的子节点必须是黑色的;e、从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点
  3. 应用:红黑树的应用比较广泛,主要是用它来存储有序数据,它的时间复杂度是O(lgn),效率非常之高。 例如,Java集合中的TreeMap和HashMap,都是通过红黑树去实现的

哈夫曼树

  1. 定义:给定n个权值作为n个叶子结点,构造一棵二叉树,若树的带权路径长度达到最小,则这棵树被称为哈夫曼树,哈夫曼树是最优二叉树

排序算法

冒泡排序

  1. 最大到右边。每一轮从头开始两两比较,将较大的项放在较小项的右边,这样每轮下来保证该轮最大的数在最右边
  2. 时间复杂度O(n^2),空间复杂度O(1),算法是稳定的

选择排序

  1. 最小到左边。在要排序的一组数中,选出最小的一个数与第一个位置的数交换;然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止
  2. 时间复杂度O(n^2),空间复杂度O(1),算法不稳定,性能优于冒泡排序,交换次数少

插入排序

  1. 从后向前插入位置。每步将一个待排序的记录,按其顺序码大小插入到前面已经排序的字序列的合适位置(从后向前找到合适位置后),直到全部插入排序完为止
  2. 时间复杂度O(n^2),空间复杂度O(1),算法是稳定的,性能优于冒泡排序和选择排序

希尔排序

  1. 将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序
  2. 时间复杂度O(n^1.5),空间复杂度O(1),算法不稳定

堆排序

  1. 堆排序是一种树形选择排序,是对直接选择排序的有效改进
  2. 堆的定义:具有n个元素的序列 (h1,h2,...,hn),当且仅当满足 (hi>=h2i,hi>=h2i+1)或(hi
  3. 思想:初始时把要排序的数的序列看作是一棵顺序存储的二叉树,调整它们的存储序,使之成为一个堆,这时堆根节点的数最大。然后将根节点与堆的最后一个节点交换。然后对前面(n-1)个数重新调整使之成为堆。依此类推,直到只有两个节点的堆,并对它们作交换,最后得到有n个节点的有序序列。从算法描述来看,堆排序需要两个过程,一是建立堆,二是堆顶与堆的最后一个元素交换位置。所以堆排序有两个函数组成。一是建堆的渗透函数,二是反复调用渗透函数实现排序的函数
  4. 时间复杂度O(nlogn),空间复杂度O(1),算法不稳定,不适合排序数据较少的情况

快速排序

  1. 左小右大。通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分关键字小,则分别对这两部分继续进行排序,直到整个序列有序
  2. 时间复杂度O(nlogn),空间复杂度O(nlogn),算法不稳定,快速排序在序列中元素很少时效率将比较低,此时不如插入排序,一般使用插入排序提高整体效率

归并排序

  1. 归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新有序表,即:把待排序序列分为若干个子序列,每个子序列是有序的,然后再把有序子序列合并为整体有序序列
  2. 时间复杂度O(nlogn),空间复杂度O(1),算法是稳定的

排序算法Java实现

查找算法

线性查找

  1. 一个个往后顺序查找

二分查找

  1. 有序数组,折半查找

插值查找

  1. 数据有序且分布均匀,优化二分查找

斐波拉契查找

树表查找

分块查找

哈希查找

动态规划算法

贪心算法

LeetCode算法题


数据结构与算法

线性表

数组

链表

队列

二叉树

红黑树

哈夫曼树

排序算法

冒泡排序

选择排序

插入排序

希尔排序

堆排序

快速排序

归并排序

查找算法

线性查找

二分查找

插值查找

斐波拉契查找

树表查找

分块查找

哈希查找

动态规划算法

贪心算法

LeetCode算法题


Android开发面试系列文章:

  • Android开发面试:Android知识答案精解
  • Android开发面试:Java知识答案精解
  • Android开发面试:架构设计和网络知识答案精解
  • Android开发面试:数据结构与算法知识答案精解
  • Android开发面试:Kotlin面试知识答案精解

相关文章:

Android开发面试:数据结构与算法知识答案精解

目录 数据结构与算法 线性表 数组 链表 栈 队列 树 二叉树 红黑树 哈夫曼树 排序算法 冒泡排序 选择排序 插入排序 希尔排序 堆排序 快速排序 归并排序 查找算法 线性查找 二分查找 插值查找 斐波拉契查找 树表查找 分块查找 哈希查找 动态规划算法…...

京东前端手写面试题集锦

实现call方法 call做了什么: 将函数设为对象的属性执行和删除这个函数指定this到函数并传入给定参数执行函数如果不传入参数,默认指向为 window // 模拟 call bar.mycall(null); //实现一个call方法: // 原理:利用 context.xxx self obj.…...

【JDK动态代理】及【CGLib动态代理】:Java的两种动态代理方式

Java的两种动态代理方式动态代理是什么?JDK动态代理CGLib动态代理CGLib 底层原理CGLib 实现步骤两者区别Spring AOP原理--动态代理动态代理是什么? 动态代理就是,在程序运行期,创建目标对象的代理对象,并对目标对象中的…...

《程序员面试金典(第6版)》面试题 04.05. 合法二叉搜索树

题目描述 实现一个函数,检查一棵二叉树是否为二叉搜索树。 示例 1: 输入: 2/ \1 3输出: true 示例 2: 输入: 5/ \1 4/ \3 6输出: false 解释: 输入为: [5,1,4,null,null,3,6]。 根节点的值为 5 ,但是其右子节点值为 4 。 解题思路与代码 使用…...

Nginx 反向代理技术梳理

Nginx 反向代理技术梳理 使用反向代理脑图 域名 A 可以解析找到 CDN 缓存 用户点击 APP 即通过 URL 发送 HTTPS 请求域名会进入阿里云的 DNS 服务器,解析域名会做第一级负载均衡通过 CDN 解析出域名,通过阿里云配置转发到 CDN 缓存服务器 CDN 有数据则直…...

华为OD机试 - 整数编码(Java) | 机试题+算法思路+考点+代码解析 【2023】

整数编码 题目 实现一种整数编码方法,使得待编码的数字越小,编码后所占用的字节数越小。 编码规则如下: 1、编码时7位一组,每个字节的低7位用于存储待编码数字的补码。 2、字节的最高位表示后续是否还有字节,置1表示后面还有更多的字节,置0表示当前字节为最后一个字…...

蓝桥杯冲击01 - 质数篇

目录 前言 一、质数是什么 二、易错点 三、试除法判断是否为质数 四、质数常考三大模型 五、真题练手 前言 距离蓝桥杯还有一个月,高效复习蓝桥杯知识, 质数相关的题目在蓝桥杯中经常出现。例如,2016年蓝桥杯省赛初赛第四题就是要求判…...

【WEB前端进阶之路】 HTML 全路线学习知识点梳理(下)

前言 本文是HTML零基础小白学习系列的第三篇文章,点此阅读 上一篇文章 文章目录前言十五.HTML布局1.使用div元素添加网页布局2.使用table元素添加网页布局十六.HTML表单和输入1.文本域2.密码字段3.单选按钮4.复选框5.提交按钮十七.HTML框架1.iframe语法2.iframe设置…...

MySQL索引分类

1 MySQL索引都有哪些分类按数据结构分类可分为:Btree索引、Hash索引、Full-text索引;按物理存储分类可分为:聚簇索引、二级索引(辅助索引);按字段特性分类可分为:主键索引、普通索引、前缀索引;按字段个数分类可分为&a…...

会声会影2023最新版图文安装详细教程

会声会影2023操作简单,使用便捷,创意十足,新增的分屏功能,轨道透明度,镜头平移等功能,让用户的剪辑过程更加流畅,轻松就能制作出令人惊艳的视频作品。它不仅符合家庭或个人所需的影片剪辑功能&a…...

Java中的反射

类加载器(1)类的加载当我们的程序在运行后,第一次使用某个类的时候,会将此类的class文件读取到内存,并将此类的所有信息存储到一个Class对象中。说明:a.图中的Class对象是指:java.lang.Class类的…...

STM32入门笔记(03):STM32F103C8T6定时器的输入捕获模式和编码器模式(SPL库函数版)

目录1.定时器的输入捕获模式定时器输入捕获实验代码实现程序说明实现思路实现效果知识要点2.定时器的编码器模式定时器编码器实验代码实现实验思路知识要点参考资料先导知识 [1] STM32入门笔记(02):定时器之定时器中断、输入捕获和PWM输出(SPL库函数版)…...

《网络安全》零基础教程-适合小白科普

《网络安全》零基础教程 目录 目录 《网络安全》零基础教程 第1章 网络安全基础 什么是网络安全 常见的网络安全威胁 网络安全的三个基本要素 网络安全的保障措施 第2章 网络攻击类型 病毒、蠕虫、木马、后门 DoS、DDoS攻击 ​​​​​​​SQL注入、XSS攻击 ​​​…...

微信小程序语言与web开发语言的区别

WXML与HTML的区别def:WXML是小程序框架设计的一套标签语言,用来构建小程序页面的结构,作用类似于web开发中的HTML区别:标签名称的不同如HTML中的div,span,img,a分别对应wxml中的view&#xff0c…...

【2022-09-14】米哈游秋招笔试三道编程题

第一题:最短子串 题目描述 米小游拿到了一个字符串,她想截取一个连续子串,使得该子串中包含至少k个连续的“mihoyo”。 你可以帮米小游求出最短的子串长度,以及对应的子串位置吗? 输入描述 第一行输入两个正整数n…...

云监控能力介绍

传统监控介绍 监控系统必要性 监控系统的能力清单 市面上常见商业及开源监控工具集 传统监控体系的不足 云监控介绍 云监控(CloudMonitor)是一项针对云资源和互联网应用进行监控的服务。 云监控为云上用户提供开箱即用的企业级开放型一站式监控解决方…...

HTML 文档类型

<!DOCTYPE> 声明帮助浏览器正确地显示网页。 <!DOCTYPE> 声明 Web 世界中存在许多不同的文档。只有了解文档的类型&#xff0c;浏览器才能正确地显示文档。 HTML 也有多个不同的版本&#xff0c;只有完全明白页面中使用的确切 HTML 版本&#xff0c;浏览器才能完…...

【UML】软件设计说明书 (完结)

目录一. &#x1f981; 前言1.1 编写目的1.2 背景1.3 定义1.4 参考资料二. &#x1f981; 总体设计2.1需求规定2.1.1 系统描述2.1.2 系统用例图2.2 运行环境2.2.1 设备2.2.2 支持软件2.2.3 接口2.2.4 控制2.3 基本设计概念2.4 系统结构三. &#x1f981; 用例分析与设计3.1 用户…...

MATLAB——FFT(快速傅里叶变换)

基础知识 FFT即快速傅里叶变换&#xff0c;利用周期性和可约性&#xff0c;减少了DFT的运算量。常见的有按时间抽取的基2算法&#xff08;DIT-FFT&#xff09;按频率抽取的基2算法&#xff08;DIF-FFT&#xff09;。 1.利用自带函数fft进行快速傅里叶变换 若已知序列x[4,3,2,6…...

力扣-进店却未进行过交易的顾客

大家好&#xff0c;我是空空star&#xff0c;本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目&#xff1a;1581. 进店却未进行过交易的顾客二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行…...

EPUB转有声书:基于Python的自动化实现与TTS技术实践

1. 项目概述&#xff1a;从电子书到有声书的自动化转换 作为一名长期与数字内容打交道的开发者&#xff0c;我经常遇到一个需求&#xff1a;如何高效地将海量的 EPUB 电子书转换成方便“听”的有声书&#xff1f;无论是通勤路上、做家务时&#xff0c;还是想保护视力的时候&am…...

00-Docker和Docker-compose的安装

一、Docker的安装1.下载docker与依赖组件# 下载依赖组件 yum -y install yum-utils device-mapper-persistent-data lvm2# 导入docker官方仓库 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 下载docker yum -y install do…...

Cesium 体积光阴影率分析和阴影体渲染效果

Cesium 体积光阴影率分析和阴影体渲染效果 在传统的 GIS 日照分析中&#xff0c;当分析对象扩展到高层建筑时&#xff0c;阴影在空中随着时间推移形成的“三维空间漏斗”才是数据的全貌。 为了在前端实现这种影视级的三维体积阴影分析&#xff08;Volumetric Shadow Analysis…...

用STC89C52单片机+DHT11做个简易温湿度计(附完整代码和串口打印)

基于STC89C52与DHT11的智能温湿度监测系统开发实战 在创客教育和嵌入式开发入门领域&#xff0c;温湿度监测系统一直是最受欢迎的实践项目之一。这个看似简单的项目实际上融合了传感器技术、单片机编程和通信协议三大核心技能&#xff0c;是检验初学者嵌入式开发能力的绝佳试金…...

用C语言和mciSendString函数,在VS2019里写一个带进度条的音乐播放器(附完整源码)

用C语言打造可视化音乐播放器&#xff1a;从零实现带进度条的音频控制工具 在枯燥的控制台程序与炫酷的图形界面之间&#xff0c;存在一个被许多C语言学习者忽视的中间地带——通过Windows API实现简单而实用的可视化反馈。本文将带你用mciSendString函数构建一个带有实时进度条…...

用STM32F103和RC522模块DIY一个智能门禁,附完整代码和PCB文件

用STM32F103和RC522模块打造高性价比智能门禁系统 在创客圈子里&#xff0c;智能门禁系统一直是极受欢迎的DIY项目。它不仅融合了嵌入式开发、射频识别和物联网技术&#xff0c;还能解决生活中的实际问题。相比动辄上千元的商业门禁设备&#xff0c;用STM32F103C8T6&#xff0…...

Awareness-Local:让本地大模型拥有时间与文件感知能力的Agent框架实践

1. 项目概述与核心价值最近在折腾本地大模型应用的时候&#xff0c;发现了一个挺有意思的项目&#xff0c;叫Awareness-Local。这个项目名直译过来是“本地意识”&#xff0c;听起来有点玄乎&#xff0c;但它的核心目标非常明确&#xff1a;让大型语言模型&#xff08;LLM&…...

一天一个开源项目(第100篇):Easy-Vibe - Datawhale 出品的 AI 时代编程入门教程

引言 “会说话&#xff0c;就能做应用。” 这是"一天一个开源项目"系列的第100篇文章——一个小小的里程碑。 选择 Easy-Vibe 作为第100篇&#xff0c;有一种奇妙的对称感。这个系列从第一篇开始&#xff0c;记录的都是"工具"——各种帮助开发者做事更快、…...

基于MCP协议为本地工具集构建AI能力:syzygy-mcp-layer项目解析

1. 项目概述与核心价值最近在折腾AI应用开发&#xff0c;特别是想给本地的大语言模型&#xff08;LLM&#xff09;加上“联网”和“调用工具”的能力时&#xff0c;发现了一个绕不开的组件&#xff1a;MCP&#xff08;Model Context Protocol&#xff09;。简单来说&#xff0c…...

从F450大机架振动说起:手把手调教BetaFlight滤波与PID,告别‘果冻’飞行

从F450大机架振动说起&#xff1a;手把手调教BetaFlight滤波与PID&#xff0c;告别‘果冻’飞行 当你的F450四轴飞行器在空中像果冻一样颤抖时&#xff0c;那种挫败感只有亲身经历过的飞手才能体会。大机架特有的低频振动问题&#xff0c;往往让新手在完成基础组装后陷入调试泥…...