算法编程(四)

基于matlab的捷联惯导算法编程(四) 前言 此篇章为成果展示,一是进行整图对比,二是捷联惯导和组合导航误差对比。 三、成果展示 (一)整图对比 首先,如图10所示,设置了8张图,上面一组图为捷联惯导解算的4张图,下面一组为组合导航解算的4张图。分别是姿态角的俯仰角和横滚角、航向角、速度、直角坐标XY的值。通过对比分析,一是姿态角图形差不多,如图11和12所示;二是速度图,捷联惯导解算的东、北速度再上面抖动,天向速度一直在上升,没有收敛趋势,如图13所示;三是直角坐标X,Y值的二维图,捷联惯导成上升转弯趋势,没有回到原地形成回路,而组合导 阅读详情

一、给定一个整数序列,请获取最小(最大)的K个数字

    这个题还算比较熟悉,在大数据计算时,经常会遇到类似于“Top N”的情况,这个题的解法有很多种,本例还是采用惯例做法:创建一个K大小的容器,容器内的数字都是排序的;在遍历输入序列时,如果遇到比容器内最大值还要大的数字时,则将容器中的最小值移除,即容器中保留K个“已经遇见”的最大数字。在java中,我们直接使用TreeSet作为容器,当然你也可以自己构建一个红黑数。

    代码样例:

public static TreeSet<Integer> find(int[] source,int k) {
    TreeSet<Integer> top = new TreeSet<>();
    for(int i= 0; i< source.length; i++) {
        int item = source[i];
        if(top.isEmpty() || top.size() < k) {
            top.add(item);
            continue;
        }

        if(top.last() > item) {
            top.add(item);
            top.pollLast();//移除最后一个
        }
    }
    return top;
}

 

二、给定一个整数数组序列,请计算出“连续子数组”和值的最大值,数组中正负值都有,无序

    描述:输入一个数组,这个数组中有正、负整数组成,求数组中“连续的几个元素”的和值的最大值;比如原始数组为{1,-2,3,10,-4,7,2,-5},其中{3,10,-4,7,2}这个子数组的和值最大,为18。

 

    这个题其实并不复杂,认识到判断时机就可以突破了。

数组:1,-2,3,10,-4,7,2,-5

1)
初始最大值为,max = 1,即数组的第一个元素。
2)
1,-2和值为-1,因为-1比max小,继续。
3)
-1,3和值为-2,此时我们就需要做中断了,因为-2比当前元素3的值还要小,
因此我们可以断定,前面的“子数组”的计算是无效的
(只要它参与计算,只会降低总和);
所以此时,我们将3作为新子数组的开始,max = 3,继续遍历。
4)
遍历时,如果和值比当前max大,则替换max。
直到数组的结尾!

 

    代码样例:

private static int maxSum(int[] source) {
    if(source.length == 0) {
        throw new RuntimeException("Empty array!");
    }

    int max = source[0];
    int length = source.length;
    int current = max;
    for (int i = 1 ; i < length; i++) {
        current = source[i] + current;
        if (current <= source[i]) {
            max = source[i];
            current = max;
            continue;
        }
        if(current > max) {
            max = current;
        }
    }
    return max;
}

 

三、给定一个字符数组,请获得此数组中重复出现次数最多的字符元素(字符元素一定有重复)

    这个题,其实很简单,如果你钻了牛角尖,估计就比较麻烦:比如你尝试使用逐个遍历比较的方式!我们已知的字符是有限的,我们可以使用Map来保存每个字符以及其出现的次数,这样就很容易得到答案,Map的key为字符值,value为其出现的次数。

    代码样例:

public static char maxTimes(char[] sources) {
    if(sources.length == 0) {
        throw new RuntimeException("Empty array!");
    }
    int maxTimes = 1;
    char result = sources[0];
    Map<Character,Integer> container = new HashMap<>();
    for(int i = 0;i < sources.length; i++) {
        char item = sources[i];
        if(container.containsKey(item)) {
            Integer times = container.get(item);
            times++;
            if(times > maxTimes) {
                maxTimes = times;
                result = item;
            }
            container.put(item,times++);
        }else {
            container.put(item,1);
        }
    }
    return result;
}

 

    题目的变种可以为:

    给定1亿个数字,它们被保存在文件中,请你找出出现次数最多的哪个数字!

    思路为分治法,将数组取模并分散存储在多个小文件中,确保相同的数字被转存在相同的文件中,然后逐个计算每个文件中出现次数最多的数字,然后取次数最多的那个即可。

 

四、有两个单向链表,它们在某个节点开始,后续节点都重合,请你用程序找出首个重合点。

    比如如下两个链表:

    1-->2-->3-->4-->5-->6-->7

    7-->10->5-->6-->7

    我们看出,5是这两个链表的首个重合点。要实现这个算法,用粗暴的方式逐个遍历复杂度太高,当然实现起来简单。我们在上述几个题目都已经表示,对于单向链表,从后遍历或者查找,最好的办法就是借助辅助栈,这个题目我们也这么做。

    用两个辅助栈分表保存链表的节点,然后同时逐个弹出,并比较栈顶的值,直到第一个不相同的节点出现为止。代码样例如下:

public static Node joinPoint(LinkedNodes first,LinkedNodes second) {
    if(first == null || second == null) {
        return null;
    }
    Node  firstRoot = first.header.next;
    Node secondRoot = second.header.next;
    if(firstRoot == null || secondRoot == null) {
        return null;
    }
    //借助辅助栈,将单向链表反序
    Stack<Node> data1 = new Stack<>();
    Stack<Node> data2 = new Stack<>();
    while (true) {
        Node item = firstRoot.next;
        if(item == null) {
            break;
        }
        data1.push(item);
    }

    while (true) {
        Node item = secondRoot.next;
        if(item == null) {
            break;
        }
        data2.push(item);
    }

    //依次弹出栈,并比较,最后一个相同点就是join点
    Node result = null;
    while (true) {
        Node n1 = data1.pop();
        Node n2 = data2.pop();
        if(n1.value != n2.value) {
            break;
        }else {
            result = n1;//or n2;
        }
    }
    return result;
}

 

五、求一个二叉树的最大深度

    二叉树的树深,就是root节点到最底层叶子节点的最大距离。很简单,递归实现;代码样例如下:

public static int depth(BinaryTreeNode node) {
    if(node == null) {
        return 0;
    }
    BinaryTreeNode left = node.left;
    int l = 0;
    if(left != null) {
        l = depth(left);
    }
    BinaryTreeNode right = node.right;
    int r = 0;
    if(right != null) {
        r = depth(right);
    }
    return l > r ? l + 1 : r + 1;
}

 

【花雕学编程】Arduino FOC 之四轴SCARA机器人正逆解算法 涉及硬件操作的代码,您要在使用前确认引脚和电平等参数的正确性和安全性。在Arduino平台上实现FOC可以提供平滑的运行和高度的扭矩、速度和位置控制,它通过精确控制电机的电流和电压来实现高效率、高精度和低噪声的操作。5、创新:Arduino可以让你用电子的方式来表达你的创意和想象,你可以用Arduino来制作各种有趣和有用的项目,如机器人、智能家居、艺术装置等。1、高性能电机控制:FOC是一种高级的电机控制算法,可以精准控制PMSM(永磁同步电机)和BLDC(无刷直流)电机,实现平滑的转速和扭矩输出。 阅读详情

相关推荐

RADIOML 2018.01A数据集在自动调制识别中的实战应用指南

本文提供了RADIOML 2018.01A数据集在自动调制识别(AMR)任务中的完整实战指南。内容涵盖从数据集介绍、数据获取与解包、高效预处理流程,到构建PyTorch数据管道、模型设计(如1D CNN、ResNet)以及训练调参策略。重点阐述了如何利用该数据集训练鲁棒的AI模型,以应对复杂信道环境和低信噪比挑战,并给出了详细的性能评估方法。

plant的博客 174

【花雕学编程】Arduino PID 之四轴无人机姿态算法

在电机控制中,PID 可以根据目标速度和实际速度的偏差来调整电机的驱动信号,实现稳定的转速控制。5、创新:Arduino可以让你用电子的方式来表达你的创意和想象,你可以用Arduino来制作各种有趣和有用的项目,如机器人、智能家居、艺术装置等。1、机器人运动控制:在机器人技术中,基于速度闭环的PID控制可以用于电机的速度调节,实现精确的运动控制,提高机器人的灵活性和稳定性。4、风扇和泵控制:在风扇和水泵等设备中,PID控制能够根据需求自动调节转速,提供适合的流量和风速,提高系统的能效。

雕爷学编程 1249

matlab电偶极子源码,电偶极子的MATLAB场模拟

电偶极子周围电场电势分布的MATLAB三维模拟Matlab可以用于模拟四维场的效果,本文以电偶极子的电场和电势场为例展示MATLAB在该方面领域的应用。摘要电偶极子由一个正电荷和一个负电荷组成,其电场和空间电势分布与单电荷相比具有一些重要的特性。本文将给出电场和电势场的近似表达式。这两个量的精确表达式是复杂的,不太常用,因此 MATLAB 被采用来操作精确值和绘制三维分布的远区域, 近区域和一侧区...

weixin_35135480的博客 3150

编程中十大常用算法:(四)KMP算法

背景 字符串匹配问题: (1)有一个字符串str1=“BBC ABCDAB ABCDABCDABDE”,和一个子串str2=“ABCDABD” (2)现在要判断str1中是否含有str2,如果存在,就返回第一次出现的位置,如果没有,则返回-1 暴力匹配算法: 利用暴力匹配算法,假设现在str1匹配到i位置,子串str2匹配到j位置,则有: 1)如果当前字符串匹配成功(即str1[i]=str[j]),则i++,j++,继续匹配下一个字符 2)如果匹配失败(即str1[i]!=str[j]),则i=i-(j-

z437490133的博客 708

从毫米波到计算机视觉:智能座舱监控系统的多模态技术融合

本文探讨了智能座舱监控系统中多模态技术融合的创新应用,涵盖毫米波雷达、红外传感与计算机视觉的协同架构。通过传感器时空对齐、低光照算法突破及隐私保护设计,系统在DMS、OMS等场景实现99.7%的检测准确率,同时优化成本至$45以内,为汽车智能化提供关键技术支撑。

d6e7f8的博客 902

老服务器焕新记:在Dell R730上折腾Nvidia K80显卡的完整记录(含Anaconda环境配置)

本文详细记录了在Dell R730服务器上为Nvidia K80计算卡安装驱动、配置CUDA及Anaconda环境的完整过程。文章重点解决了老旧硬件与CentOS 7系统的兼容性问题,提供了从BIOS设置、驱动版本精准匹配到Python机器学习环境搭建的实战指南,旨在帮助读者低成本挖掘旧服务器的GPU计算潜力。

weixin_29197835的博客 503

educoder机器学习-实验四-编程实现基于信息增益进行划分选择的决策树算法

这是educoder平台,机器学习-实验四-编程实现基于信息增益进行划分选择的决策树算法的代码详解与解决过程详解,创造不易,请大家点点赞,收藏藏!

m0_64351669的博客 2066

南邮-软件设计实验(C++版)

南邮软件设计 A档 一、分数统计 课题内容:   设计一个分数统计程序。包括学生信息的输入输出以及排序。通过该课题全面熟悉数组、字符串、文件的使用,掌握程序设计的基本方法及友好界面的设计。 课题要求: (1)输入某班级学生的姓名、分数; (2)对(1)的分数进行降幂排列并输出; (3)具有输入输出界面。 示例代码: #include<bits/stdc++.h> using...

Dainelcw 1万+

cuda编程_CUDA编程入门(四)并行归约算法

这一篇我们一起学习一下如何使用CUDA实现并行归约算法。首先我们要知道什么是并行归约。并行归约(Reduction)是一种很基础的并行算法,简单来说,我们有N个输入数据,使用一个符合结合律的二元操作符作用其上,最终生成1个结果。这个二元操作符可以是求和、取最大、取最小、平方、逻辑与或等等。我们以求和为例,假设输入如下:int array[8] = [3, 1, 7, 0, 4, 1, 6, 3]...

weixin_39517054的博客 423

基于C#通过PLCSIM ADV仿真软件实现与西门子1500PLC的S7通信方法演示

基于C#通过PLCSIM ADV仿真软件实现与西门子1500PLC的S7通信方法演示

Robot_PLC_HMI_Automation 3161

openGauss学习笔记-280 openGauss性能调优-实际调优案例09-修改启动参数解决TPCC大幅度波动

openGauss学习笔记-280 openGauss性能调优-实际调优案例09-修改启动参数解决TPCC大幅度波动280.1 现象描述280.2 优化分析 openGauss学习笔记-280 ope

超哥的博客 309

C#编程之经典算法——查找(四)

斐波那契查找(Fibonacci search)       原理与折半查找是一样的。只不过是通过斐波那契数列来划分查找区域的。示例代码/// /// 斐波那契查找/// /// 递增的有序数组/// 查询的元素/// 返回元素在数组中索引。如果数组中无此元素则返回-1int Search4(char[] cArr, char c){ int

yyhian的专栏 777

工业4.0必备:C#上位机+数字孪生 生产线实时监控与智能预警系统(工业级实战)

数据割裂:PLC、传感器、工业相机的数据散落在不同系统,想看全局生产状态要切换N个软件,“数据孤岛”导致决策滞后;故障难预判:设备突发故障时,只能停机排查,平均故障响应时间超30分钟,一条生产线停工1小时损失超10万;可视化差:传统监控只有冰冷的数字和2D图表,设备运行状态、生产流程、物料流转无法直观感知,新人上手需3个月才能熟悉产线。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 659

趣学python编程 (四、数据结构和算法介绍)

数据结构和算法在编程中非常重要。数据结构是组织和存储数据的方式,而算法是解决问题的方法和步骤。你要挑战的蓝桥杯,实际也是在设计算法解决问题。其实各种编程语言都只是工具,而程序的核心=数据结构+算法。犹如练武,数据结构和算法是内功,各种编程语言都只是刀枪棍棒,根据需要在不同的场合选用顺手的兵器。

猫哥 的沉淀、积累、总结。天天学习,好好向上...c/c++,嵌入式 linux,Android,HarmonyOS,AIOT) 900

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

计算思维核心四步法:从分解、抽象到算法,打通编程与AI学习路径

计算思维是一种运用计算机科学基本概念进行问题求解、系统设计和人类行为理解的思维过程,它超越了单纯的编程技能,是一种普适性的元能力。其核心原理建立在四大支柱之上:分解、模式识别、抽象和算法设计。掌握计算思维的技术价值在于,它能提供一套可迁移的问题解决框架,是高效进行软件开发、系统设计以及理解人工智能工作原理的基础。在应用场景上,无论是设计一个学生成绩管理系统,还是构建具备智能联想功能的通讯录程序,计算思维都能指导开发者从复杂需求中提炼出清晰的数据模型和可执行的算法步骤。例如,在人工智能领域,大语言模型的训练本

weixin_30784501的博客 363

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

C#编程之经典算法——排序(四)

<br />直接插入排序(straight insertion sort)<br /> <br />      直接插入排序的作法是: <br />  每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。 <br />  第一趟比较前两个数,然后把第二个数按大小插入到有序表中; 第二趟把第三个数据与前两个数从后向前扫描,把第三个数按大小插入到有序表中;依次进行下去,进行了(n-1)趟扫描以后就完成了整个排序过程。 <br />  直接插入排序属于稳定的排序,时间复杂性为o(n^2),

yyhian的专栏 1476

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

数据结构编程算法(四)

1.随机数 2.矩阵的相关操作 3.字符串比大小 4.矩阵的转置 5.时间的比较 6.构造与撤销 有关C++书上习题十的若干问题

XLYcmy的博客 489

计算机网络原理——实验四编程实现路由算法

北京交通大学计算机网络原理——实验四编程实现路由算法

hzzzhzzzh的博客 567

ADSP-21569的图形化编程专题四:基础算法-音效算法

ADSP-21569的基础音效算法应该怎么去写,看本篇,写了15个例程。

ADI_OP的博客 1020

【花雕学编程】Arduino BLDC 之四足机器人步态协调控制算法

本文介绍了一种基于Arduino和BLDC电机的四足机器人步态协调控制算法。系统采用无刷伺服电机作为关节执行器,通过相位振荡器、逆运动学和状态机等算法实现多自由度协同控制。文章详细解析了系统特点(包括高动态响应、闭环控制和实时同步要求)、应用场景(如教育实验、仿生研究等)及注意事项(硬件选型、性能优化和安全调试)。提供了对角步态和动态小跑步态的代码实现示例,展示了如何通过PID控制和相位差协调实现稳定行走。该系统适合作为中高阶机器人开发平台,但需注意Arduino的性能限制和BLDC驱动的复杂度。

雕爷学编程 1299

笔试编程算法题笔记(四)(C++代码)

解法:二分查找本题主要考察对二分查找的理解程度,在一次二分查找中,我们需要清楚的知道我们要查找的是以左端点为主还是以右端点为主的,二者在代码上也会存在一些差别。public:// 先找左端点//left可以不用重置// 再找右端点。

m0_74099572的博客 817

【花雕学编程】Arduino PID 之使用MPU6050和GYML8511的四轴无人机控制算法

Arduino是一个开放源码的电子原型平台,它可以让你用简单的硬件和软件来创建各种互动的项目。Arduino的核心是一个微控制器板,它可以通过一系列的引脚来连接各种传感器、执行器、显示器等外部设备。Arduino的编程是基于C/C++语言的,你可以使用Arduino IDE(集成开发环境)来编写、编译和上传代码到Arduino板上。Arduino还有一个丰富的库和社区,你可以利用它们来扩展Arduino的功能和学习Arduino的知识。Arduino的特点是: 1、开放源码:Arduino的硬件和软件都是开

雕爷学编程 1256

C算法编程题(四)上三角

前言   上一篇《C算法编程题(三)画表格》   上几篇说的都是根据要求输出一些字符、图案等,今天就再说一个“上三角”,有点类似于第二篇说的正螺旋,输出的字符少了,但是逻辑稍微复杂了点。 程序描述   方阵的主对角线之上称为“上三角”。    请你设计一个用于填充n阶方阵的上三角区域的程序。填充的规则是:使用1,2,3….的自然数列,从左上角开始,按照顺时针方向螺旋填充。    例如:当...

weixin_33758863的博客 427

python编程篇之数据结构与算法(四)

栈 栈(stack),有些地方称为堆栈,是一种容器,可存入数据元素、访问元素、删除元素,它的特点在于只能允许在容器的一端(称为栈顶端指标,英语:top)进行加入数据(英语:push)和输出数据(英语:pop)的运算。没有了位置概念,保证任何时候可以访问、删除的元素都是此前最后存入的那个元素,确定了一种默认的访问顺序。 由于栈数据结构只允许在一端进行操作,因而按照后进先出(LIFO, Last In...

peterblackas的博客 178
上一篇: 算法编程(三)
下一篇: Tomcat JNDI连接池配置
shift_alt_ctrl
博客等级 码龄10年 0粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值