算法通关村第十五关 | 青铜 | 用4KB内存寻找重复元素

news/2024/7/24 9:31:06 标签: 算法, java, 算法通关村

处理海量数据的思路

1.使用位存储:占用的空间是存整数的 1/8 。

2.分块:也叫外部排序,将大文件划分为若干小块,先处理小块再逐步得到想要的结果,需要至少遍历两次全部序列,是用时间换空间的方法。

3.堆:极其适合超大数据或者流数据中找第 K 大,第 K 小, K 个最大, K 个最小等等问题。

用4KB内存寻找重复元素

给定一个数组,长度最大为32000 ,在其中找重复元素,但是只能使用 4KB 内存。

采用位运算。

java">public class FindDuplicatesIn32000 {
    public void checkDuplicates(int[] array) {
        BitSet bs = new BitSet(32000);
        for (int i = 0; i < array.length; i++) {
            int num = array[i];
            int num0 = num - 1;
            if (bs.get(num0)) {
                System.out.println(num);
            } else {
                bs.set(num0);
            }
        }
    }
    class BitSet {
        int[] bitset;
        public BitSet(int size) {
            this.bitset = new int[size >> 5];
        }
        boolean get(int pos) {
            int wordNumber = (pos >> 5);
            int bitNumber = (pos & 0x1F);
            return (bitSet[wordNumber] & (1 << bitNumber)) != 0;
        }
        void set(int pos) {
            int wordNumber = (pos >> 5);
            int bitNumber = (pos & 0x1F);
            bitset[wordNumber] |= 1 << bitNumber;
        }
    }
}

如果对您有帮助,请点赞关注支持我,谢谢! ❤
如有错误或者不足之处,敬请指正! ❤
个人主页:星不易 ❤
算法通关村专栏:不易|算法通关村 ❤


http://www.niftyadmin.cn/n/5257192.html

相关文章

向IDEA导入SpringBoot项目如何运行

解析项目 拿到项目之后&#xff0c;先分析分析。一般都有.md文件指导你&#xff0c;给你说用什么语言&#xff0c;工具&#xff0c;jdk版本&#xff0c;数据库版本&#xff0c;有没有maven。如果没有就直接将项目导入idea. 1.配置maven,没有maven请看https://blog.csdn.net/m0_…

盛最多水的容器,算法题

只记录思路&#xff0c; 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#xff1…

互斥锁的原理

互斥锁&#xff08;Mutex&#xff0c;全称Mutual Exclusion&#xff09;是一种同步机制&#xff0c;用于确保在任意时刻&#xff0c;只有一个线程可以访问共享资源&#xff0c;从而防止数据竞争和不一致性。互斥锁的基本思想是在进入临界区之前&#xff0c;先获取锁&#xff1b…

坑爹的奥数(枚举法)

枚举法是一种解决问题的基本方法&#xff0c;它通过列举问题的所有可能情况来找到问题的解。这种方法适用于问题的解空间相对较小&#xff0c;可以通过穷举所有可能的解来找到最优解或满足特定条件的解。 以下是枚举法的一般步骤&#xff1a; 定义问题&#xff1a; 确定问题的…

排序算法之三:希尔排序

希尔排序基本思想 希尔排序法又称缩小增量法 希尔排序法的基本思想是&#xff1a;先选定一个整数&#xff0c;把待排序文件中所有记录分成个组&#xff0c;所有距离为的记录分在同一组内&#xff0c;并对每一组内的记录进行排序。然后&#xff0c;取&#xff0c;重复上述分组…

如何在Android中旋转屏幕时避免重新绘制Activity

如何在Android中旋转屏幕时避免重新绘制Activity 在Android开发中&#xff0c;设备旋转通常导致当前活动&#xff08;Activity&#xff09;被销毁并重新创建&#xff0c;这可能导致用户界面重置和不必要的资源重新加载。然而&#xff0c;有时我们希望避免这种行为&#xff0c;…

【力扣】141和142环形链表

141.环形链表 法一&#xff1a;快慢指针 思路&#xff1a; 用两个指针slow,fast,后者能比前者多走一步路&#xff0c;那判断是不是有环&#xff0c;只需要判断是否会相遇。 就是有一个能比乌龟跑2倍快的兔子&#xff0c;两小只都在有环的路上跑&#xff0c;那是不是肯定会相…

申论笔记(思路技巧)

文章目录&#xff1a; 一&#xff1a;福利 二&#xff1a;常见题型 1.归纳概括题 2.提出对策/措施/建议题 2.1 找到对策的来源 2.2 提炼对策 2.3 明确是否需要先概括问题 2.4 对策表述三部曲 3.综合分析题 3.1 综合分析最大的难点 3.2 分析问题的技巧 4.应用文/公文…