代码随想录算法训练营第七天 | 哈希表

简介: 代码随想录算法训练营第七天 | 哈希表

454. 四数相加 II

题目描述

网络异常,图片无法展示
|

思路分析

将四个数组分成两两一对分别计算,前两个数组遍历想加结果放在 map中 , key是值,value是出现的次数,最后在相加

代码展示

public static int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {
    int n = nums1.length, m, result = 0;
    Map<Integer,Integer> map = new HashMap<>();
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            m = nums1[i] + nums2[j];
            map.put(m, map.getOrDefault(m,0)  + 1);
        }
    }
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            m = nums3[i] + nums4[j];
            result += map.getOrDefault( 0 - m, 0);
        }
    }
    return result;
}
复制代码

提交结果

网络异常,图片无法展示
|

总结

个人思考有误,想多了导致第一次提交的时候报错,不该不该

383. 赎金信

题目描述

网络异常,图片无法展示
|

思路分析

这道题和 242.字母异位词做法思路一样

先创建一个 int利用下标来存储 magazine字母的个数,在遍历 ransomNote在响应下标减去,最后遍历 ints数组,判断有没有 < 0的值就可以了

代码展示

public static boolean canConstruct(String ransomNote, String magazine) {
    int[] ints = new int[26];
    for (int i = 0; i < magazine.length(); i++) {
        ints[magazine.charAt(i) - 'a']++;
    }
    for (int i = 0; i < ransomNote.length(); i++) {
        ints[ransomNote.charAt(i) - 'a']--;
    }
    for (int anInt : ints) {
        if (anInt < 0){
            return false;
        }
    }
    return true;
}
复制代码

提交结果

网络异常,图片无法展示
|

15. 三数之和

题目描述

网络异常,图片无法展示
|

思路分析

注意题中只说返回元素,而不是下标

所以我们可以直接对当前数组进行排序,从左往右遍历,固定住下标为 i的数,下标为 (i - length)的数组让他们双指针去做判断

需要注意的是,当 nums[i] > 0的时候,证明后面都是正数,三数想加肯定不能为 0

相邻两个数相同时要跳过,不然统计的结果会有重复

代码展示

public List<List<Integer>> threeSum(int[] nums) {
    List<List<Integer>> result = new ArrayList<>();
    Arrays.sort(nums);
    int left,right, sum;
    for (int i = 0; i < nums.length; i++) {
        if (nums[i] > 0){
            break;
        }
        if (i > 0 && nums[i] == nums[i - 1]){
            continue;
        }
        left = i + 1;
        right = nums.length - 1;
        while (left < right){
            sum = nums[i] + nums[left] + nums[right];
            if (sum == 0){
                result.add(Arrays.asList(nums[i],nums[left], nums[right]));
                while(left < right && nums[right] == nums[right - 1]) right--;
                while(left < right && nums[left] == nums[left + 1]) left++;
                left++;
                right--;
            }else if (sum > 0){
                right--;
            }else{
                left++;
            }
        }
    }
    return result;
}
复制代码

提交结果

网络异常,图片无法展示
|

总结

细节细节还是细节把控问题

18. 四数之和

题目描述

网络异常,图片无法展示
|

思路分析

和三数之和一样,固定一个点变成了固定两个点,双指针操作让四数值和暴力解法的时间复杂度: O(n^4)变成了 O(n^3)

细节细节还是细节,真的难搞

代码展示

public static List<List<Integer>> fourSum(int[] nums, int target) {
    List<List<Integer>> list = new ArrayList<>();
    Arrays.sort(nums);
    for (int i = 0; i < nums.length; i++) {
        if (nums[i] > target && (nums[i] > 0 || target > 0)){
            break;
        }
        if (i > 0 && nums[i] == nums[i - 1]){
            continue;
        }
        for (int j = nums.length - 1; j > i + 2; j--) {
            if (j < nums.length - 1 && nums[j] == nums[j + 1]){
                continue;
            }
            int left = i + 1, right = j - 1;
            while(left < right){
                long sum =(long) nums[i] + nums[j] + nums[left] + nums[right];
                if (sum > target){
                    right--;
                }else if (sum < target){
                    left++;
                }else{
                    list.add(Arrays.asList(nums[i],nums[j],nums[left],nums[right]));
                    while(left < right && nums[left] == nums[left + 1]) left++;
                    while(left < right && nums[right] == nums[right - 1])right--;
                    left++;
                    right--;
                }
            }
        }
    }
    return list;
}
复制代码

提交结果

网络异常,图片无法展示
|

总结

咱就说,细节决定成败,方向一直是对的,就是各种细节问题



宁轩
+关注
目录
打赏
0
0
0
0
2
分享
相关文章
公司局域网管理中的哈希表查找优化 C++ 算法探究
在数字化办公环境中,公司局域网管理至关重要。哈希表作为一种高效的数据结构,通过哈希函数将关键值(如IP地址、账号)映射到数组索引,实现快速的插入、删除与查找操作。例如,在员工登录验证和设备信息管理中,哈希表能显著提升效率,避免传统线性查找的低效问题。本文以C++为例,展示了哈希表在局域网管理中的具体应用,包括设备MAC地址与IP分配的存储与查询,并探讨了优化哈希函数和扩容策略,确保网络管理高效准确。
探究‘公司禁用 U 盘’背后的哈希表算法与 Java 实现
在数字化办公时代,信息安全至关重要。许多公司采取“禁用U盘”策略,利用哈希表算法高效管理外接设备的接入权限。哈希表通过哈希函数将设备标识映射到数组索引,快速判断U盘是否授权。例如,公司预先将允许的U盘标识存入哈希表,新设备接入时迅速验证,未授权则禁止传输并报警。这有效防止恶意软件和数据泄露,保障企业信息安全。 代码示例展示了如何用Java实现简单的哈希表,模拟公司U盘管控场景。哈希表不仅用于设备管理,还在文件索引、用户权限等多方面助力信息安全防线的构建,为企业数字化进程保驾护航。
基于 Python 哈希表算法的员工上网管理策略研究
于当下数字化办公环境而言,员工上网管理已成为企业运营管理的关键环节。企业有必要对员工的网络访问行为予以监控,以此确保信息安全并提升工作效率。在处理员工上网管理相关数据时,适宜的数据结构与算法起着举足轻重的作用。本文将深入探究哈希表这一数据结构在员工上网管理场景中的应用,并借助 Python 代码示例展开详尽阐述。
31 3
JavaScript 中通过Array.sort() 实现多字段排序、排序稳定性、随机排序洗牌算法、优化排序性能,JS中排序算法的使用详解(附实际应用代码)
Array.sort() 是一个功能强大的方法,通过自定义的比较函数,可以处理各种复杂的排序逻辑。无论是简单的数字排序,还是多字段、嵌套对象、分组排序等高级应用,Array.sort() 都能胜任。同时,通过性能优化技巧(如映射排序)和结合其他数组方法(如 reduce),Array.sort() 可以用来实现高效的数据处理逻辑。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
探秘文件共享服务之哈希表助力 Python 算法实现
在数字化时代,文件共享服务不可或缺。哈希表(散列表)通过键值对存储数据,利用哈希函数将键映射到特定位置,极大提升文件上传、下载和搜索效率。例如,在大型文件共享平台中,文件名等信息作为键,物理地址作为值存入哈希表,用户检索时快速定位文件,减少遍历时间。此外,哈希表还用于文件一致性校验,确保传输文件未被篡改。以Python代码示例展示基于哈希表的文件索引实现,模拟文件共享服务的文件索引构建与检索功能。哈希表及其分布式变体如一致性哈希算法,保障文件均匀分布和负载均衡,持续优化文件共享服务性能。
近端策略优化(PPO)算法的理论基础与PyTorch代码详解
近端策略优化(PPO)是深度强化学习中高效的策略优化方法,广泛应用于大语言模型的RLHF训练。PPO通过引入策略更新约束机制,平衡了更新幅度,提升了训练稳定性。其核心思想是在优势演员-评论家方法的基础上,采用裁剪和非裁剪项组成的替代目标函数,限制策略比率在[1-ϵ, 1+ϵ]区间内,防止过大的策略更新。本文详细探讨了PPO的基本原理、损失函数设计及PyTorch实现流程,提供了完整的代码示例。
424 10
近端策略优化(PPO)算法的理论基础与PyTorch代码详解
企业监控软件中 Go 语言哈希表算法的应用研究与分析
在数字化时代,企业监控软件对企业的稳定运营至关重要。哈希表(散列表)作为高效的数据结构,广泛应用于企业监控中,如设备状态管理、数据分类和缓存机制。Go 语言中的 map 实现了哈希表,能快速处理海量监控数据,确保实时准确反映设备状态,提升系统性能,助力企业实现智能化管理。
36 3
员工电脑监控屏幕场景下 Python 哈希表算法的探索
在数字化办公时代,员工电脑监控屏幕是保障信息安全和提升效率的重要手段。本文探讨哈希表算法在该场景中的应用,通过Python代码例程展示如何使用哈希表存储和查询员工操作记录,并结合数据库实现数据持久化,助力企业打造高效、安全的办公环境。哈希表在快速检索员工信息、优化系统性能方面发挥关键作用,为企业管理提供有力支持。
61 20
基于 Go 语言的公司内网管理软件哈希表算法深度解析与研究
在数字化办公中,公司内网管理软件通过哈希表算法保障信息安全与高效管理。哈希表基于键值对存储和查找,如用户登录验证、设备信息管理和文件权限控制等场景,Go语言实现的哈希表能快速验证用户信息,提升管理效率,确保网络稳定运行。
30 0
解锁文档管理系统高效检索奥秘:Python 哈希表算法探究
在数字化时代,文档管理系统犹如知识宝库,支撑各行各业高效运转。哈希表作为核心数据结构,通过哈希函数将数据映射为固定长度的哈希值,实现快速查找与定位。本文聚焦哈希表在文档管理中的应用,以Python代码示例展示其高效检索特性,并探讨哈希冲突解决策略,助力构建智能化文档管理系统。

热门文章

最新文章