首页 > 其他分享 >找到两个数组中的公共元素

找到两个数组中的公共元素

时间:2024-07-16 23:51:37浏览次数:12  
标签:arr int 元素 a1 a2 数组 公共 nums1 nums2

leetcode 2956 https://leetcode.cn/problems/find-common-elements-between-two-arrays/
一次遍历实现

class Solution:
    def findIntersectionValues(self, nums1: List[int], nums2: List[int]) -> List[int]:
        arr = [0] * 110
        for n in nums1:
            arr[n] +=1
        a1 = 0
        a2 = 0
        for n in nums2:
            if arr[n] !=0:
                if arr[n] !=-1:
                    a1 += arr[n]
                a2+=1
                arr[n] = -1
        return [a1,a2]

一次遍历的方法什么原理呢?
先用数组arry,记录nums1中所有元素出现的次数,其实就是类似哈希表
然后遍历nums2
如果这个元素n做下标时,在数组arry中对应的值不为0,代表这个值nums1中也出现了,
a1 += array[n],a2++,但是如果另一个nums2中的元素也为n,这时候a1就不能再+=arry[n]了,因为已经加过了,a2还是要++
所以在判断array[n] !=0 成立时,还要再把array[n] 设为特值-1,多一个判断。

标签:arr,int,元素,a1,a2,数组,公共,nums1,nums2
From: https://www.cnblogs.com/yumingkuan/p/18306370

相关文章

  • 2956. 找到两个数组中的公共元素
    思路:用两个map分别存储两个列表内容,然后再对照即可classSolution{public:vector<int>findIntersectionValues(vector<int>&nums1,vector<int>&nums2){unordered_map<int,int>mp1;unordered_map<int,int>mp2;......
  • 算法入门-数组2
    第一部分:数组26.删除有序数组中的重复项(简单)题目:给你一个非严格递增排列的数组nums,请你 原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。元素的相对顺序应该保持一致。然后返回nums中唯一元素的个数。考虑nums的唯一元素的数量为k,你......
  • 代码随想录算法训练营第十一天 | 150. 逆波兰表达式求值、 239. 滑动窗口最大值、347.
    150.逆波兰表达式求值题目:.-力扣(LeetCode)思路:遇到数字进栈,遇到符号出栈运算。代码:classSolution{public:intevalRPN(vector<string>&tokens){stack<longlong>sta;for(strings:tokens){if(s=="+"||s=="-"||s=="*"......
  • C++(函数参数为数组与指针算术)
    目录1.函数参数为数组2.指针算术2.1arr是指向第一个元素的地址2.2arr[i]表示什么?#include<iostream>voidprintArray(intarr[],intsize){for(inti=0;i<size;++i){std::cout<<arr[i]<<"";}}intmain(){intarr[5]......
  • 使用 CSS 选择器实现对不含 title 属性元素的选择
    使用CSS选择器实现对不含title属性元素的选择在CSS中,选择器用于指定样式规则应用于哪些元素。虽然CSS没有直接排除某些属性的功能,但是可以通过使用伪类选择器和属性选择器来实现排除含有特定属性的元素的效果。要排除含有title属性的元素,可以使用:not伪类选择器。以......
  • 二维数组转一维数组
    创建一个数组vararr=[['a','b','c'],['d','e','f'],[1,2,3,'a','f']] 二维数组转一维数组functionArrayFn(arr){varbrr=[]for(vari=0;i<arr.length;......
  • 数组005 二维数组
    1#include<iostream>2usingnamespacestd;34//二维数组作为函数的参数5//注意此时的长度,是有多少行,也就是最外层有多少个6voiderweishuzu(int(*p)[4],intlen)7{8for(inti=0;i<len;i++)9for(intii=0;ii<4;ii++)10......
  • 类模板案例——数组类封装(vector<>的逻辑代码)
    .hpp文件#pragma#include<iostream>usingnamespacestd;template<classT>classMy_arry{public: My_arry(intcapacity)//赋初值 { this->m_capacity=capacity;//容量 this->m_Arry_size=0;//大小 this->m_Arry_Addres=newT[capacity];......
  • 代码随想录算法训练营第23天 | 669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树
    代码随想录算法训练营第22天|669.修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树修剪二叉搜索树:https://leetcode.cn/problems/trim-a-binary-search-tree/description/代码随想录:https://programmercarl.com/0669.修剪二叉搜索树.html#......
  • 声明一个数组为什么需要花费大量时间?
    声明一个数组需要花费大量时间,主要原因有以下几点:内存申请:创建数组时,需要申请一块连续的内存空间。如果系统内存不足或者剩余的内存不连续,可能会导致创建失败。此外,对于大数组,存储需求呈指数级增长,例如一个四维字符数组需要2,160字节的内存,而存储双精度浮点数则需要17,280字......