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

代码随想录一刷——350.两个数组的交集II

用双指针法

C:

/**

 * Note: The returned array must be malloced, assume caller calls free().

 */

int cmp(const int* a,const int* b)

{

    return *a==*b ? 0 : *a > *b ? 1 : -1;

}

int* intersect(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize)

{

/*

  1. 函数功能

    • qsort是 C 语言标准库中的快速排序函数,用于对给定的数组进行排序。
    • 它可以对任意类型的数据进行排序,只要提供合适的比较函数。
  2. 函数参数

    • 第一个参数是要排序的数组的首地址。在这段代码中,分别是nums1nums2,即两个整数数组的首地址。
    • 第二个参数是数组中元素的个数。这里分别是nums1Sizenums2Size
    • 第三个参数是每个数组元素的大小,以字节为单位。由于这里是整数数组,所以是sizeof(int)
    • 第四个参数是一个指向比较函数的指针。在这段代码中,传入了自定义的比较函数cmp

*/

    qsort(nums1,nums1Size,sizeof(int),cmp);

    qsort(nums2,nums2Size,sizeof(int),cmp);

    *returnSize = 0;

    int min = 0;

    //min = nums1Size > nums2Size ? nums2Size : nums1Size < nums2Size ? nums1Size : nums1Size;

    //int* result = (int*)malloc(sizeof(int)*min);

    int* result = (int*)malloc(sizeof(int)*fmin(nums1Size,nums2Size));

    int index1 = 0;

    int index2 = 0;

    while(index1 < nums1Size && index2 < nums2Size)

    {

        if(nums1[index1]<nums2[index2])

        {

            index1++;

        }

        else if(nums1[index1]>nums2[index2])

        {

            index2++;

        }

        else

        {

            result[(*returnSize)++] = nums1[index1];

            index1++;

            index2++;

        }

    }

    return result;

}

Python:

class Solution(object):

    def intersect(self, nums1, nums2):

        """

        :type nums1: List[int]

        :type nums2: List[int]

        :rtype: List[int]

        """

        nums1.sort()

        nums2.sort()

        res = list()

        len1 = len(nums1)

        len2 = len(nums2)

        index1=index2=0

        while index1<len1 and index2 < len2:

            if nums1[index1]<nums2[index2]:

                index1 +=1

            elif nums1[index1] > nums2[index2]:

                index2+=1

            else:

                res.append(nums1[index1])

                index1+=1

                index2+=1

        return res

      

C++:

class Solution {

public:

    vector<int> intersect(vector<int>& nums1, vector<int>& nums2)

    {

        sort(nums1.begin(),nums1.end());

        sort(nums2.begin(),nums2.end());

        int index1 = 0;

        int index2 = 0;

        vector<int> res;

        while(index1<nums1.size() && index2<nums2.size())

        {

            if(nums1[index1] < nums2[index2])

                index1++;

            else if(nums1[index1] > nums2[index2])

                index2++;

            else

                {

                    res.push_back(nums1[index1]);

                    index1++;

                    index2++;

                }

        }

        return res;

    }

};


http://www.kler.cn/a/376465.html

相关文章:

  • C# 实现进程间通信的几种方式(完善)
  • wx.setNavigationBarColor动态设置导航栏颜色无效(亲测有效)
  • FPGA时序分析和约束学习笔记(3、Timequest时序路径详解和优化)
  • YoloV8改进策略:Block改进|RFE模块,提高小物体的识别精度|即插即用|代码+修改过程
  • sublime Text中设置编码为GBK
  • 探索 ONLYOFFICE:开源办公套件的魅力
  • 024集——CAD 动态显示图形——ed.Redraw(ent)实现(CAD—C#二次开发入门)
  • 初探Flink的序列化
  • centos7 zabbix监控nginx的pv和uv和status_code
  • 无法启动此程序win10玩游戏找不到d3dx9_43.dll缺失的五种常用有效解决方法
  • el-table 修改高亮行样式
  • 基于 Flask 的 Python 应用程序,主要功能包括用户认证、文件上传(CSV 和图片)、图像文字识别(OCR)以及根据识别结果进行一些数据处理和比对
  • [MySQL]DQL语句(一)
  • SRS:构建实时免费视频服务器的全方位指南
  • 使用Nginx作为Web服务器和反向代理
  • Webserver(2.4)进程控制
  • 2024 手机解压缩软件评测与推荐
  • 【ROS2】文档、教程、源码汇总
  • Android——横屏竖屏
  • 视频怎么进行格式转换?6款视频转换MP4格式的免费软件!
  • 【sqlmap使用手册-持续更新中】
  • 安装xtrabackup备份mysql
  • python项目实战 查询手机号码归属地源码
  • Node.js:Express 服务 路由
  • 工控一体机行业前景:智能化、自动化与高效能
  • 针对Hmaster启动后很快停止