两个数组的交集

题目

给你两个整数数组 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]

思路

先对两个数组进行排序,然后使用两个指针,分别指向两个数组开始的位置。

如果两个指针指向的值相同,说明这个值是他们的交集,就把这个值加入到集合list中,然后两个指针在分别往后移一步。
如果两个指针指向的值不同,那么指向的值相对小的往后移一步,相对大的先不动,然后再比较
一直重复上面的操作,直到其中一个指针不能再移动为止,最后再把集合list转化为数组即可。

代码

code

class Solution {
    public int[] intersect(int[] nums1, int[] nums2) {
        Arrays.sort(nums1);
        Arrays.sort(nums2);
        ArrayList<Integer> integers = new ArrayList<>();
        int i =  0;
        int j = 0;
        while (i<nums1.length && j<nums2.length){
            if (nums1[i] > nums2[j]){
                j++;
            }else if (nums1[i] < nums2[j]){
                i++;
            }else{
                integers.add(nums1[i]);
                i++;
                j++;
            }
        }
        int [] res = new int[integers.size()];
        for (int k = 0;k<integers.size();k++){
            res[k] = integers.get(k);
        }
        return res;
    }
}

加一

题目

给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。

你可以假设除了整数 0 之外,这个整数不会以零开头。

 

示例 1:

输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。
示例 2:

输入:digits = [4,3,2,1]
输出:[4,3,2,2]
解释:输入数组表示数字 4321。

思路

easy。

代码

code

class Solution {
    public int[] plusOne(int[] digits) {
   for (int i = digits.length-1;i>=0;i--){
           if (digits[i]!= 9){
               digits[i]++;
               return digits;
           }else{
               digits[i] = 0;
           }
           if (digits[0] == 0){
               int [] temp = new int[digits.length+1];
               temp[0] = 1;
                return temp;
           }
       }
       return digits;
    }
}

END

有问题请联系feinan6666@outlook.com

本文作者:
文章标题:2022-2-28 力扣刷题记录
本文地址:https://home.cnboy.top/78.html
版权说明:若无注明,本文皆神码人の世界原创,转载请保留文章出处。
最后修改:2022 年 02 月 28 日 08 : 21 PM
如果觉得我的文章对你有用,请随意赞赏