【算法】-- 【计算两个有序整型数组的交集、判断一个数组中数值是否连续相邻、求解数组中反序对的个数、如何求解最小三元组距离】

算法题——合并两个有序的数组 1. 本题知识点 双指针 2. 题目描述 给出两个有序的整数数组 A 和 B,请将数组 A 合并到数组 B 中,变成一个有序的数组 注意: 可以假设 A 数组有足够的空间存放 B 数组的元素,A 和 B 中初始的元素数目分别为 m 和 n 3. 解题思路 从后往前看,在每一个位置上选择 A 和 B 中较小的那一个。 4. 代码 public class Solution { public void merge(int A[], int m, int B[], int n) { for 阅读详情

01 如何计算两个有序整型数组的交集

问题描述:假设两个含有n个元素的有序整型数组a和b,其中a1={1,5,9,10,12,13}, a2={2,3,5,10,15},那么他们的交集{5,10}
方法:二路归并法

 public static ArrayList<Integer> mixed(int a1[],int a2[]){
        ArrayList<Integer> mix=new ArrayList<>();
        int l1=a1.length;
        int l2=a2.length;
        int i=0,j=0;
        while (i<l1&&j<l2){
            if (a1[i]==a2[j]){
                mix.add(a1[i]);
                i++;
                j++;
            }
            else if (a1[i]>a2[j])
                j++;
            else
                i++;
        }
        return mix;
    }

    public static void main(String[] args) {
        int []a1={1,5,9,10,12,13};
        int []a2={2,3,5,10,15};
        ArrayList<Integer> mixed = mixed(a1, a2);
        System.out.println(mixed);
    }

02 如何判断一个数组中数值是佛连续相邻的

问题描述:一个数组序列,元素取值可能是0~65535中的任意一个数,相同数值不会重复出现。0是例外,可以反复出现。设计一种算法,当从数组序列中随意选取5个数值,判断这5个数值是否连续相邻。

 public static Boolean isContinuous(int [] a){
        int n=a.length;
        int min=-1,max=-1;
        for (int i=0;i<n;i++){
            if (a[i]!=0){
                if (min>a[i]||-1==min){
                    min=a[i];
                }
                if (max<a[i]||-1==max){
                    max=a[i];
                }
            }
        }
        if (max-min>n-1){
            return false;
        }else
            return true;

    }

    public static void main(String[] args) {
        int array[]={8,7,5,0,6};
        if (isContinuous(array))
            System.out.println("数组是连续数组");
        else
            System.out.println("数组不是连续数组");
    }

03 如何求解数组中反序对的个数

问题描述:给定一个数组a,如果a[i]>a[j] ( i<j ),那么a[i] 与a[j] 被称为一个反序,例如:{5,4,3,2,1}

方法一:蛮力法

对数组的每一数字,遍历它后面的所有的数字,如果后面的数字比它小,那么就找到一个逆序对。

    public static int reversCount(int a[]){
        int n=a.length;
        int count=0;
        for (int i=0;i<n;i++){
            for (int j=i+1;j<n;j++){
                if (a[i]>a[j])
                    count++;
            }
        }
        return count;
    }


    public static void main(String[] args) {
        int a[]={5,4,3,2,1};
        System.out.println(reversCount(a));
    }

方法二:分治归并法

可以参考归并排序的方法。在归并排序的基础上额外使用一个计数器来记录逆序对的个数。

   public static int reverseCount=0;

    public static void merge(int array[],int begin,int mid,int end){
        int i,j,k,n1,n2;
        n1=mid-begin+1;
        n2=end-mid;
        int [] L=new int[n1];
        int [] R=new int[n2];
        for (i=0,k=begin;i<n1;i++,k++)
            L[i]=array[k];
        for (i=0,k=mid+1;i<n2;i++,k++)
            R[i]=array[k];
        for (k=begin,i=0,j=0;i<n1&&j<n2;k++){
            if (L[i]<R[i]){
                array[k]=L[i++];
            }else {
                reverseCount+=mid-i+1;
                array[k]=R[j++];
            }
        }
        if (i<n1){
            for (j=i;j<n1;j++,k++)
                array[k]=L[j];
        }
        if (j<n2){
            for (i=j;i<n2;j++,k++)
                array[k]=R[i];
        }

    }

    public static void merge_sort(int a[],int begin,int end){
        if (begin<end){
            int mid=(end+begin)/2;
            merge_sort(a,begin,mid);
            merge_sort(a,mid+1,end);
            merge(a,begin,mid,end);
        }
    }

    public static void main(String[] args) {
        int a[]={5,4,3,2,1};
        merge_sort(a,0,a.length-1);
        System.out.println(reverseCount);
    }

04 如何求解最小三元数组距离

问题描述:已知3个升序整数数组a[l]、b[m]和c[n]。请在3个数组中各找一个元素,使的组成三元组距离最短。
三元组的距离定义是:假设a[i]、b[j]、c[k]是一个三元数组,那么距离为Distance = max(|a[i] - b[j] |, | a[i] - c[k] | , | b[j] - c[k] |);

方法一:蛮力法,就是分别遍历3个数组中的元素,分别求出它们的距离,然后从这里面找最小值。

    public static int max(int a,int b,int c){
        int max=a>b?a:b;
        return (max>c)?max:c;
    }


  public static int solvingViolence(int a[],int b[],int c[]){
        int minDist=max(a[0],b[0],c[0]);
        int dist=0;
        for (int i=0;i<a.length;i++){
            for (int j=0;j<b.length;j++){
                for (int k=0;k<c.length;k++){
                    dist=max(Math.abs(a[i]-b[j]),Math.abs(a[i]-c[k]),Math.abs(b[j]-c[k]));
                    if (minDist>dist)
                        minDist=dist;
                }
            }
        }

        return minDist;
    }
  public static void main(String[] args) {
        int a[]={3,4,5,6,7};
        int b[]={10,12,14,16,18};
        int c[]={20,22,23,25,26,30,34,37};

        System.out.println(solvingViolence(a,b,c));

    }

方法二:最小距离法
从三个数组的第一个元素开始,先求出它们的距离minDist,接着找出3个数组中当前元素的距离,若比mindist小,则把当前距离赋值给minDIst。以此类推,知道遍历完其中一个数组。

 public static int max(int a,int b,int c){
        int max=a>b?a:b;
        return (max>c)?max:c;
    }

    public static int min(int a,int b,int c){
        int min = a>b?b:a;
        return (min>c)?c:min;
    }

    public static int mindDistance(int a[],int b[],int c[]){
        int aLen=a.length;
        int bLen=b.length;
        int cLen=c.length;

        int curDist=0;
        int min=0;
        int minDist=Integer.MAX_VALUE;
        int i=0;
        int j=0;
        int k=0;

        while(true){
            curDist =max(Math.abs(a[i]-b[j]),Math.abs(a[i]-c[k]), Math.abs(b[j]-c[k]));
            if (curDist<minDist)
                minDist=curDist;
            //找出当前遍历到3个数组中的最小值
            min=min(a[i],b[j],c[k]);
            if (min==a[i]){
                if (++i>=aLen)
                    break;
            }else if (min==b[j]){
                if (++j>=bLen)
                    break;
            }else {
                if (++k>=cLen)
                    break;
            }
        }
        return minDist;
    }



    public static void main(String[] args) {
        int a[]={3,4,5,6,7};
        int b[]={10,12,14,16,18};
        int c[]={20,22,23,25,26,30,34,37};

        System.out.println(mindDistance(a,b,c));

    }
两个升序的数组A、B,将AB合并到C,保持升序,去除重生的元素 立即下载

相关推荐

从零开始:用Kimi API和LangChain打造智能写作助手

本文详细介绍了如何从零开始,利用Kimi API提供的强大AI大模型能力,结合LangChain框架构建一个智能写作助手。通过实战演示了环境搭建、核心写作链构建、以及引入检索增强生成和智能体等进阶功能,旨在解决长文档创作、事实准确性等痛点,打造一个能理解意图、调用工具并保持记忆的智能创作伙伴。

weixin_29294395的博客 139

Java学习手册:(数据结构与算法-数组)如何计算两个有序整型数组的交集?

问题描述: 假设两个含有n个元素的有序(非降序)整型数组a和b,其中a = {0,1,2,3,4},b = {1,3,5,7,9},那么它们的交集为{1,3}。 方法一: 二路归并法。设两个数组分别为array1[n1],array2[n2],从i,j开始分别遍历两个数组,在遍历的过程中,如果当前遍历位置的array1[i]与array2[j]相等,则此数为两个数组的交集,记录下来,并继续向...

浩比的专栏 465

Cartographer从安装到实战:手把手教你运行2D/3D建图与定位

本文提供了一份详尽的Cartographer从零安装到实战应用的完整指南。内容涵盖环境准备、依赖编译、源码构建等关键步骤,并手把手指导读者运行2D/3D官方数据集进行建图与定位测试。文章深入解析了参数配置与自定义数据适配方法,帮助开发者快速掌握这一强大的实时同步定位与建图工具,并将其应用于机器人导航与自动驾驶等实际场景。

rice5的博客 950

找出两个有序数组的交集

import java.util.ArrayList; import java.util.List; /** * 【题目】:别人面经上的一道题:求两个有序数组中的交集。看似很简单的一道题,但是最终想要的思路是一个来回二分查找的思路 * 【思想】:求交集的就需要去查找两个数组中的重复元素。然后要查找的话,又是有序数组,自然想到二分查找。所以,首先遍历数组A中的数numsA[idx] * 然后再数组B中去二分查找numsA[idx],返回一个索引idx2; 然后if(numsA[idx]==numsB[

weixin_44718747的博客 1431

Flowable第一篇、快速上手(Flowable安装、配置、集成)

Flowable是一个轻量级、高效可扩展的工作流和业务流程管理(BPM)引擎,支持在Java应用程序中实现复杂的工作流自动化。Flowable最初是作为Activiti项目的一个分支发展而来的,但它现在已经成为一个独立的开源项目,并在企业级应用中得到了广泛使用

Du_XiaoNan的博客 1万+

高通410随身WiFi刷OpenWRT与Debian双系统一键集成方案

本文详细介绍高通410随身WiFi设备刷入OpenWRT与Debian双系统的一键集成方案。通过虎王工作室提供的一键刷机包,用户可轻松实现双系统部署,兼顾OpenWRT的网络功能与Debian的完整应用服务,适用于网络加速、服务器部署等多种场景,并提供了硬件资源分配与系统切换的实用指南。

docker7nomad的博客 1137

如何计算两个有序整型数组的交集

例如两个含有n个元素的有序(非降序)整型数组a和b(数组a与b中都没有重复元素),求出其共同元素, a = 0, 1, 2, 3, 4 b = 1, 3, 5, 7, 9 那么它们的交集为{1, 3}。 计算数组交集可以采用很多种方法,但数组的相对大小一般会影响算法的效率,所以需要根据两个数组的相对大小来确定采用的方法: (1)对于两个数组长度相当的情况,一般可以采取如下三种方法。 方

Health's Box 1132

VSAN数据救援实战:当26个虚拟机突然不可访问时我们做了什么?

本文深度复盘了一次由运维操作失误引发的VMware vSAN存储危机,导致26个虚拟机数据不可访问的实战救援过程。文章详细剖析了vSAN脑裂状态的诊断方法,分享了在官方支持受限时,如何结合社区智慧与自主分析,通过精准的底层命令干预和状态推理,最终成功恢复全部数据的破局思路与操作细节,为vSAN数据救援提供了宝贵经验。

weixin_35749786的博客 237

(哈希表 ) 349. 两个数组的交集 ——【Leetcode每日一题】

349. 两个数组的交集 给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。

weixin_43412762的博客 1398

利用Dify构建文档内容的分析对比

本次主要做了一些workflow和Agent的应用实现,供大家参考。主要目的是为了进行两个内部报告文件的内容对比,特别是报告中的各类审批表、申请表、推荐表和流程对比,本地数据通过知识库方式分别加载到两个知识库中,编制工作流针对同一个问题进行知识库检索,之后将查询结果进行合并,再一起提交给LLM进行对比,最终将对比分析结果以markdown方式返回显示。主要包括如何构建知识库,如何设计workflow、如何将工作流发布为工具、如何设计提示词、如何在agent中引入前面发布的工具,最终通过agent实现与用户交

hhue2007的专栏 2525

详细推导波特图增益和相位曲线

最近因为项目需求,在回看波特图方面的内容。大三那会,《自动控制原理》这本书里面就讲过这些东西,但是那时候总感觉学这些没啥用,反正以后也用不到,对这种课程的重视度不是很高。 工作后发现,只要你从事的是和本专业相关的工作,大学学过的很多理论课程在后面大概率都会用到。曾经那些我们在学校以为用不上的东西,熟不知在后面用处还多着呢。所以啊,仅仅只是我们的以为而已! 现在还在学校的同学,对待《自动控制理论》、《信号与系统》、《通信原理》这样的核心专业课,建议还是好好学习一下,认真听听课。哪怕是考试完以后就会忘掉,但当我

D_Katter的博客 3936

数组

目录 数组中的最大值和最小值 找出数组中第二大的数 最大子数组之和 数组中重复最多的元素 数组中两两相加等于20的组合种数 一个数组循环右移k位 找出数组中第k个最小的数 数组中只出现一次的元素 数组中唯一的重复元素 递归方法求一个整数数组的最大元素 数对之差的最大值 .绝对值最小的数 数组中两个元素的最小距离 指定数字在数组中第一次出现的位置 数组的两...

XMQ2006的博客 245

092、Python在芯片验证中的应用:从脚本小子到验证架构师

Python在芯片验证中的高效应用 本文通过实际案例展示了Python在芯片验证中的关键作用。凌晨三点的调试场景揭示了传统方法的局限,Python脚本能在20分钟内分析80GB波形数据定位FIFO指针问题。文章重点介绍了两个核心工具: 智能日志分析系统:通过正则表达式和上下文分析,自动分类百万行验证日志中的错误,生成可视化报告,效率远超传统grep方法。 寄存器模型生成器:将Excel表格自动转换为UVM寄存器模型代码,将原本需要两周的手工工作缩短至两小时,同时保证零错误。 文章还展示了Python与Sys

z534437748的博客 72

全网最新阿里巴巴面试通关手册:学习笔记+算法宝典+面试题库

对于面试,一定要有良好的心态,这位小伙伴面试美团的时候没有被前面阿里的面试影响到,发挥也很正常,也就能顺利拿下美团的offer。小编还整理了大厂java程序员面试涉及到的绝大部分面试题及答案,希望能帮助到大家,也祝愿大家都能够升职加薪!《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!” />对于面试,一定要有良好的心态,这位小伙伴面试美团的时候没有被前面阿里的面试影响到,发挥也很正常,也就能顺利拿下美团的offer。

2401_84009549的博客 724

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

最新全网最新阿里巴巴面试通关手册:学习笔记+算法宝典+面试题库,rocketmq原理解析

算法部分:(1)一个长度为n的数组,元素在1到n之间,找到一个重复的元素,空间复杂度越低越好;祝愿,明年的你会更好!

2401_84103216的博客 908

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

全网最新阿里巴巴面试通关手册:学习笔记+算法宝典+面试题库(1)

文章中涉及到的知识点我都已经整理成了资料,录制了视频供大家下载学习,诚意满满,希望可以帮助在这个行业发展的朋友,在论坛博客等地方少花些时间找资料,把有限的时间,真正花在学习上,所以我把这些资料,分享出来。相信对于已经工作和遇到技术瓶颈的朋友们,在这份资料中一定都有你需要的内容。网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)

2401_84424649的博客 964

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

我能斩获自己跳动offer,全靠在一周内肝完这426页阿里面试通关手册,(1)

1.webpack打包文件体积过大?(最终打包为一个js文件)2.如何优化webpack构建的性能3.移动端的性能优化4.Vue的SPA 如何优化加载速度5.移动端300ms延迟6.页面的重构所有的知识点都有详细的解答,我整理成了280页PDF《前端校招面试真题精编解析》。开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

2401_84436058的博客 1013

我能斩获自己跳动offer,全靠在一周内肝完这426页阿里面试通关手册,

这次字节跳动的整个过程我就不去还原了,只将面试题分享出来吧,面试题以技术面为主,Hr面基本上大同小异我就省略掉了,可以参考一下今年字节跳动会问一些什么样的问题,热乎乎的新鲜面试题,希望能够给你带来一些帮助吧。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!Hibernate中session的update ()和saveOrUpdate ( ). load()和get ()有什么区别?request对象主要有哪些方法?

2401_84046912的博客 874

Java程序员面试宝典笔记记录-第8章数据结构部分笔记

文章目录前言相关题目如何从链表中删除重复元素?找出单链表倒数第k个元素?如何实现链表反转?如何从尾到头输出单链表?如何寻找单链表的中间节点?如何检测链表中是否有环?若单链表有环,如何查找环入口?如何判断不知道头指针情况下删除指定节点?如何判断两个链表是否相交?链表相交如何找到相交的第一个节点?如何O(1)时间复制度求栈中最小元素?如何两个栈模拟队列?如何两个队列模拟栈?如何进行选择排序如何进行插入...

YuYunTan的专栏 490

Java面试必备:阿里首发面试通关宝典震撼开源,文档+面试真题+面试技巧+心得全都有(1)

又是一年求职季,在这里,我为各位准备了一套Java程序员精选高频面试笔试真题,来帮助大家攻下BAT的offer,题目范围从初级的Java基础到高级的分布式架构等等一系列的面试题和答案,用于给大家作为参考以下是部分内容截图网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)一个人可以走的很快,但一群人才能走的更远!

2401_84411929的博客 526

Java 面试必备:阿里首发面试通关宝典震撼开源,文档

什么是守护线程? join ()方法的作用是什么? 如何通过 JDBC 访问数据库? JDBC 处理事务采用什么方法? Class.forName 的作用是什么? Statement、PreparedStatement 和 CallableStatement 有什么区别? getString ()方法与 getObject ()方法有什么区别? 使用 JDBC 时需要注意哪些问题? 什么是 JDO? JDBC 与 ..

m0_67322837的博客 300

28天读完349页,这份Alibaba面试通关手册,助我“闯进”字节跳动拿下offer

本人面试腾讯,阿里,百度等企业总结下来的面试经历,都是真实的,分享给大家!本人面试腾讯,阿里,百度等企业总结下来的面试经历,都是真实的,分享给大家![外链图片转存中…(img-rdbmdDk7-1711954161309)][外链图片转存中…(img-S53XlrFP-1711954161309)][外链图片转存中…(img-aKSn4Q47-1711954161310)][外链图片转存中…(img-CESdPbN9-1711954161310)]

H1767410的博客 925
上一篇: 【算法】-- 【求数对之差的最大值、求绝对值最小的数、求两个元素的最小距离、求指定数字在数组中第一次出现的位置、对数组的两个子有序段进行合并】
下一篇: 【算法】-- 【实现字符串的反转、判断两个字符串是否由相同的字符组成、删除重复的字符、统计字符串由多少个单词、按要求打印数组排列情况、输出字符串所有组合】
春来桃花开
博客等级 码龄10年 21粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值