首页 > 编程语言 >代码随想录算法训练营day7|● 454.四数相加II ● 383. 赎金信 ● 15. 三数之和 ● 18待做

代码随想录算法训练营day7|● 454.四数相加II ● 383. 赎金信 ● 15. 三数之和 ● 18待做

时间:2024-10-06 20:44:30浏览次数:9  
标签:四数 15 nums int List 随想录 right hash left

学习资料:https://programmercarl.com/0015.三数之和.html#其他语言版本

学习记录:
454.四数相加(hash_dict,前两个数一组遍历a+b,后两个数一组遍历找0-(a+b))

点击查看代码
class Solution:
    def fourSumCount(self, nums1: List[int], nums2: List[int], nums3: List[int], nums4: List[int]) -> int:
        hash_map = dict()
        for i in nums1:
            for j in nums2:
                key=i+j
                hash_map[key]=hash_map.get(key, 0)+1
        count = 0
        for i in nums3:
            for j in nums4:
                key=0-(i+j)
                if key in hash_map:
                    count += hash_map[key]
        return count

383.赎金信(类似于有效的字母异位字,只要note里字母统计个数小于等于magzinine里的统计字母个数,则返回True)
点击查看代码
class Solution:
    def canConstruct(self, ransomNote: str, magazine: str) -> bool:
        ran_list = [0]*26
        mag_list = [0]*26
        for i in ransomNote:
            index= ord(i)-ord('a')
            ran_list[index] += 1
        for i in magazine:
            index = ord(i)-ord('a')
            mag_list[index] += 1
        for i in range(26):
            if ran_list[i]<=mag_list[i]:
                pass
            else:
                return False
        return True
15.三数之和(不用hash表,用左右指针法,重点在于结果去重;初始数组排序;i代表a遍历全数组,left=i+1, right=nums.size-1;left和right向中间靠拢;因为要三个数所以left<right没有等号。) <details=""> 点击查看代码
class Solution:
    def threeSum(self, nums: List[int]) -> List[List[int]]:
        result = []
        nums.sort()
        for i in range(len(nums)):
            if nums[i] > 0:
                return result
        
            # 第一次去重
            if i > 0 and nums[i] == nums[i-1]:
                continue
            # 双指针
            left = i + 1
            right = len(nums)-1
            while right > left:
                sum = nums[i]+nums[left]+nums[right]
                if sum < 0:
                    left += 1
                elif sum > 0:
                    right -= 1
                else:
                    result.append([nums[i], nums[left], nums[right]])
                    # 在收获了一个结果后,对后续结果进行去重
                    while right>left and nums[right]==nums[right-1]:
                        right -= 1
                    while right>left and nums[left]==nums[left+1]:
                        left += 1
                    left += 1
                    right -= 1
        return result


PS:18题明天再做吧,假期结束啦,今天吃土豆烧排骨、甜椒炒肉、糖醋莲白,幸福~~~

标签:四数,15,nums,int,List,随想录,right,hash,left
From: https://www.cnblogs.com/tristan241001/p/18449385

相关文章

  • 代码随想录算法训练营 | 56. 合并区间,738.单调递增的数字
    56.合并区间题目链接:56.合并区间文档讲解︰代码随想录(programmercarl.com)视频讲解︰合并区间日期:2024-10-06想法:重叠区间类似问题Java代码如下:classSolution{publicint[][]merge(int[][]intervals){List<int[]>res=newArrayList<>();Arra......
  • CMU 15445 Project 4
    GarbageCollectionThefollowingexamplecomesfromthetestcaseTxnExecutorTest_GarbageCollection:Beforethefirstgarbagecollection,Whentxn_watermark_at_0isnotcommitted,thewatermarkis1.Whentxn_watermark_at_0iscommitted,thewatermarkc......
  • Java - 15 作用域
    Java-15作用域classCat{ intage=1;//全局变量(属性),作用域是整个cat类{intnum=100;//代码块中-局部变量}publicvoidsay(){ Stringgreet="hello";//局部变量(除了属性之外就是局部变量),只能在say方法中使用System.out.p......
  • 20241002每日一题洛谷P1563
    粗看题目我靠,什么方向还变来变去的(哭泣核心思想:圈内右数,圈外左数为整体逆时针数;圈外右数,圈内左数为整体顺时针数运用结构体就有了第一版源码:structpeople{ intface; charname[12];};intmain(){ intm,n; scanf("%d%d",&n,&m); peoplea[10010]; for(inti......
  • 代码随想录算法训练营day4|● 24. 两两交换链表中的节点 ● 19.删除链表的倒数第N个
    学习资料:https://programmercarl.com/0024.两两交换链表中的节点.html学习记录:24.两两交换链表中的节点(添加虚拟头节点;交换1、2节点和3、4节点时,要用1前面的cur,先保存1为temp且3保存为temp1,cur指向2,再把2指向temp,因为cur指向2后就与1没关联了)点击查看代码#Definitionforsi......
  • 代码随想录算法训练营 | 452. 用最少数量的箭引爆气球,435. 无重叠区间,763.划分字母区
    452.用最少数量的箭引爆气球题目链接:452.用最少数量的箭引爆气球文档讲解︰代码随想录(programmercarl.com)视频讲解︰452.用最少数量的箭引爆气球日期:2024-10-05想法:对气球起点排序,没有重叠的箭头+1,有重叠得话将右边置为最小的右边。Java代码如下:classSolution{publ......
  • 【STC15】单片机中常说的 1T 和 12T 的意思
    标准51单片机是12T的,就是说12个时钟周期(晶振周期,例如12M的,周期是1/12M,单位秒),机器做一个指令周期,刚好就是1/12M*12=1us,常见指令例如_nop_就是一个周期,刚好1us,其他的大多多于一个周期,乘除法更多。所以如果计算指令时间可以这样算。而现在51核的单片机工艺质量上去后,频率大大提高,增......
  • [Ynoi2012] NOIP2015 充满了希望
    [Ynoi2012]NOIP2015充满了希望题意给一个长为\(n\)的序列,有\(m\)个操作,操作编号从\(1\)到\(m\),每个操作为:1xy:将序列位置为\(x,y\)的两个元素交换。2lrx:将序列区间\([l,r]\)内所有元素修改为\(x\)。3x:查询序列\(x\)位置的值。现在有\(q\)次查询,每次......
  • vs2015安装包丢失或损坏解决工具 或者不能启动
    打开“本地组策略编辑器”(gpedit.msc)。展开“计算机配置”>“管理模板”>“系统”>“Internet通信管理”,然后选择“Internet通信设置”。选择“关闭自动根证书更新”>,“禁用”,然后选择“确定”或“应用”。下载最新的组件版本(备份的)https://learn.microsoft.c......
  • 代码随想录算法训练营day3|● 203.移除链表元素 ● 707.设计链表 ● 206.反转链表
    学习资料:https://programmercarl.com/链表理论基础.html#链表的类型可设置虚拟头结点dummy_head链表最后指向Null一个节点包含值和索引学习记录:203.移除链表元素(基本ListNode(),cur.next,cur.next.val)点击查看代码#Definitionforsingly-linkedlist.#classListNod......