3.23日学习总结

今天在力扣上刷了一道题,然后学习了3个小时的java,学习了面向对象中有关构造方法,方法重载和继承相关的知识点,最重要的可能就是继承了,继承的作用是为了提高代码的复用,继承可以让子类获得的父类所有功能。但是在使用这些功能时也会有很多的注意事项,比如如果父类没有默认的构造方法,子类就必须显式调用super()并给出参数以便让编译器定位到父类的一个合适的构造方法。还有有关转型的问题,以及sealed修饰的父类会明确写出能够从该父类继承的子类名称。

接下来就是我今天写的一道题了。

给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。

示例 1:

输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2,2]
示例 2:

输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[4,9]
 

提示:

1 <= nums1.length, nums2.length <= 1000
0 <= nums1[i], nums2[i] <= 1000
 

进阶:

如果给定的数组已经排好序呢?你将如何优化你的算法?
如果 nums1 的大小比 nums2 小,哪种方法更优?
如果 nums2 的元素存储在磁盘上,内存是有限的,并且你不能一次加载所有的元素到内存中,你该怎么办?

 我使用的是排序然后用指针来进行比较做到题目的要求,当指针所指的元素相同时,就可以进行输出,如果不同就将元素小的向后面移动,这样就可以找到两个数组中相同的部分。

代码如下

class Solution {

public:

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

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

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

        int l1 = nums1.size();

        int l2 = nums2.size(); 

        vector<int> s;

        int i1 = 0, i2 = 0;

      while (i1 < l1 && i2 < l2) {

            if (nums1[i1] < nums2[i2]) {

                i1++;

            } else if (nums1[i1] > nums2[i2]) {

                i2++;

            } else {

             s.push_back(nums2[i2]);

                i1++;

                i2++;

            }

        }

        return s;

    }

};

今天的总结就到这里了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值