【刷题笔记】第九天

文章目录

  • [LCR 189. 设计机械累加器](https://leetcode.cn/problems/qiu-12n-lcof/)
  • [2007. 从双倍数组中还原原数组](https://leetcode.cn/problems/find-original-array-from-doubled-array/)

LCR 189. 设计机械累加器

c++专属解法:使用sizeof函数

1 + 2 + 3 + … + target = ( 1 + t a r g e t ) t a r g e t 2 \frac{(1 + target) target}{2} 2(1+target)target

s i z e o f ( a ) = ( 1 + t a r g e t ) t a r g e t sizeof(a) = (1 + target) target sizeof(a)=(1+target)target

class Solution {
public:
    int mechanicalAccumulator(int target) {
        bool a[target][target + 1];
        return sizeof(a) >> 1;
    }
};

2007. 从双倍数组中还原原数组

方法1:哈希表

使用哈希表cnt标记2倍元素的次数

如果当前元素不存在于cnt中,说明不是某元素的2倍,所以应该是original中的元素,并在cnt中标记该元素的2倍 (cnt[changed[i] * 2]++)

如果当前元素存在于cnt中,说明是某元素的2倍,所以不是original中的元素,同时cnt中的次数-- (cnt[changed[i]]--)

如果changed是2倍数组,最后cnt的个数应该为0

class Solution {
    public int[] findOriginalArray(int[] changed) {
        Arrays.sort(changed);
        int n = changed.length;
        if (n == 0 || n % 2 != 0) return new int[0]; // 奇数个不存在original
        int[] ans = new int[n / 2];
        int index = 0;
        Map<Integer, Integer> cnt = new HashMap<>();
        for (int i = 0; i < n; ++i) {
            if (!cnt.containsKey(changed[i])) {
                // 如果changed[i]不存在于cnt里,说明是original里的元素
                if (index >= n / 2) return new int[0];
                ans[index++] = changed[i];
                cnt.put(changed[i] * 2, cnt.getOrDefault(changed[i] * 2, 0) + 1); // 标记元素和个数
            } else {
                // 如果遇到标记的元素,说明不是original里的元素,同时个数--
                int tmp = cnt.get(changed[i]);
                if (tmp == 1) {
                    cnt.remove(changed[i]);
                } else {
                    cnt.put(changed[i], tmp - 1);
                }
            }
        }
        // 如果change 是双倍数组的话,cnt的元素应该为0
        return ans;

    }
}

方法2:队列

对方法1优化,由于哈希表的元素是按顺序从小到大插入的,所以用队列来替代哈希表

队列还是只放某元素的2倍,所以如果changed是2倍数组,最终队列应该是空。

如果队列为空,存入结果数组;

如果队列不为空:

​ 队首元素等于当前元素,说明该元素是某元素的2倍,两两配对成功,弹出队列

​ 队首元素小于当前元素,由于数组是从小到大排列的,后面的元素肯定也比队首元素大,因此不存在与队首元素配对的元素,所以直接返回空

​ 队首元素大于当前元素,该元素存入结果数组,同时元素 * 2队列。

class Solution {
    public int[] findOriginalArray(int[] changed) {
        int n = changed.length;
        if (n == 0 || n % 2 != 0) return new int[0];
        Arrays.sort(changed);
        
        Queue<Integer> q = new LinkedList<>();
        int[] ans = new int[n / 2];
        int index = 0;
        for (int i = 0; i < changed.length; ++i) {
            if (q.isEmpty()) {
                if (index >= n / 2) {
                    return new int[0];
                }
                ans[index++] = changed[i];
                q.add(changed[i] * 2);
            } else {
                if (q.peek() == changed[i]) {
                    // 配对成功
                    q.poll();
                } else if (q.peek() < changed[i]) {
                    // i后面的元素只会比q.peek()大,因为q.peek()配对失败
                    return new int[0];
                } else {
                    if (index >= n / 2) {
                        return new int[0];
                    }
                    ans[index++] = changed[i];
                    q.add(changed[i] * 2);
                }
            }
        }
        return ans;

    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/556656.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

测试JAVA 测开

测试、java测开 1、测试用例要素&#xff08;4个重要要素&#xff09;2、测试用例的好处3、测试用例的设计方法3.1 基于需求设计测试用例3.2 等价类3.3 边界值3.4 判定表 1、测试用例要素&#xff08;4个重要要素&#xff09; 测试环境操作步骤测试数据预期结果 2、测试用例的…

计算机网络:CSMA/CA协议

计算机网络&#xff1a;CSMA/CA协议 CSMA/CA概述帧间间隔工作原理退避算法虚拟载波监听 CSMA/CA概述 讲解CSMA/CA之前&#xff0c;我们回顾一下CSMA/CD的三个特性&#xff1a; 多址接入MA&#xff1a;多个主机连接在一条总线上&#xff0c;竞争使用总线 载波监听CS&#xff1a…

2025考研数学武忠祥强化班视频,百度网盘课程+讲义PDF更新

25考研的小伙伴们现在应该基础都学习的差不多了吧&#xff01; 是时候进入强化阶段的学习啦。 2025考研数学强化班全程网盘&#xff1a;https://pan.baidu.com/s/1Z029fuCLkyyhIRFqd5QKcg 提取码&#xff1a;p3ue 晚上好&#xff0c;聊聊17堂课的看课攻略。 今年的17堂课还…

文件解读 | 工信部88号文发布,强调7大任务、6大重点!

工业和信息化部于4月7日印发通知&#xff0c;要求各有关单位按照安全生产治本攻坚三年行动工作部署要求&#xff0c;坚持安全发展、预防为主、技管结合&#xff0c;把安全生产和网络运行安全的任务、措施、责任真正落到实处&#xff0c;切实筑牢保障人民群众生命财产安全和社会…

【大模型书籍PDF】复旦新出!大规模语言模型:从理论到实践(书籍分享)

自2018年以来&#xff0c;包含Google、OpenAI、Meta、百度、华为等公司和研究机构都纷纷发布了包括BERT&#xff0c; GPT等在内多种模型&#xff0c;并在几乎所有自然语言处理任务中都表现出色。 今天给大家推荐一本大模型方面的书籍<大规模语言模型&#xff1a;从理论到实…

2024上海国际特种电子暨军民两用技术展览会

2024上海国际特种电子暨军民两用技术展览会 2024 Shanghai International Special Electronics and Military Civilian Dual Use Technology Exhibition 时间&#xff1a;2024年11月18日-20日 地点&#xff1a;上海新国际博览中心 详询主办方陆先生 I38&#xff08;前三位…

模拟相机拍照——对文档进行数据增强

一. 背景 假如我们有一个标准文件&#xff0c;我们对其进行文字识别、版面分析或者其他下游任务就比较容易。然而&#xff0c;当图片是手机拍照获取的&#xff0c;图片中往往有阴影、摩尔纹、弯曲。 那么&#xff0c;如何通过标准的文档&#xff0c;获得类似相机拍照的图片呢&…

Java 网络编程之TCP:基于BIO

环境&#xff1a; jdk 17 IntelliJ IDEA 2023.1.1 (Ultimate Edition) Windows 10 专业版 22H2 TCP&#xff1a;面向连接的&#xff0c;可靠的数据传送协议 Java中的TCP网络编程&#xff0c;其实就是基于常用的BIO和NIO来实现的&#xff0c;本文先讨论BIO&#xff1b; BIO…

C# - 反射动态添加/删除Attribute特性

API: TypeDescriptor.AddAttributes TypeDescriptor.GetAttributes 注意&#xff1a;TypeDescriptor.AddAttributes添加的特性需要使用 TypeDescriptor.GetAttributes获取 根据api可以看到&#xff0c;该接口不仅可以给指定类&#xff08;Type&#xff09;添加特性&#xf…

CLSRSC-400: A system reboot is required to continue installing

RHEL 7.9ORACLE RAC 12.2.0.1.0&#xff0c;在运行root.sh脚本时&#xff0c;出现CLSRSC-400: A system reboot is required to continue installing报错 # /u01/app/12.2.0/grid/root.sh Performing root user operation.The following environment variables are set as:ORA…

【吊打面试官系列】Java高并发篇 -为什么使用 Executor 框架比使用应用创建和管理线程好?

大家好&#xff0c;我是锋哥。今天分享关于 【为什么使用 Executor 框架比使用应用创建和管理线程好&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; 为什么使用 Executor 框架比使用应用创建和管理线程好&#xff1f; 为什么要使用 Executor 线程池框架 1、每…

MySQL 锁机制全面解析

目录 1. MySQL的锁类型1.1 全局锁1.2 表锁1.3 行锁1.4 共享锁&#xff08;读锁&#xff09;1.5 排它锁&#xff08;写锁&#xff09;1.6 死锁 2 乐观锁和悲观锁2.1 乐观锁2.2 悲观锁 3 意向锁4 间隙锁5 临键锁6. 事务隔离级别对锁的影响6.1 读未提交&#xff08;Read Uncommitt…

Day92:系统攻防-WindowsLinux远程探针本地自检任意执行权限提升入口点

目录 操作系统-远程漏扫-Nessus&Nexpose&Goby Nessus Nexpose 知识点&#xff1a; 1、远程漏扫-Nessus&Nexpose&Goby 2、本地漏扫-Wesng&Tiquan&Suggester 3、利用场景-远程利用&本地利用&利用条件 操作系统-远程漏扫-Nessus&Nexpose&a…

#LLM入门|RAG#3.5_基于文档的问答

大语言模型&#xff08;LLM&#xff09;构建的问答系统&#xff0c;通过整合用户文档&#xff0c;提供个性化和专业化回答。系统可检索内部文档或产品说明书&#xff0c;结合语言模型生成精准答案。 这种方法让语言模型利用外部文档专业信息&#xff0c;显著提升回答的质量和适…

RedHat9 KVM虚拟技术

以下有使用RedHat9单独的虚拟机也有使用RHEL9学员练习机和RHEL7学员练习机 KVM虚拟技术介绍 Linux的KVM(Kernel-based Virtual Machine)虚拟技术是一种基于Linux内核的虚拟化解决方案。它允许在单个物理服务器上创建和运行多个隔离的虚拟机,每个虚拟机都有自己的操作系统和…

常见嵌入式存储器学习

这里写目录标题 1. FPGA内部存储器1.1 RAM1.2 ROM 2. 外部存储器 1. FPGA内部存储器 1.1 RAM RAM即随机存取存储器&#xff08;Random Acccess Memory&#xff09;&#xff0c;数据不是线性依次存储&#xff0c;可以自由指定地址进行数据读写。RAM掉电数据丢失&#xff0c;速…

Docker 镜像仓库常见命令

Docker Registry (镜像仓库) 常用命令 docker login 功能&#xff1a;登录到一个 Docker 镜像仓库&#xff0c;如果没有指定镜像仓库的地址&#xff0c;默认就是官方的 Docker Hub 仓库。 语法&#xff1a; docker login [options] [server]选项&#xff1a; -u&#xff1a;登…

java生成数据库数据到excel当做下拉选择,copy就完事~

背景&#xff1a;由于需要下载模板&#xff0c;模板包含下拉选择框&#xff0c;但是下拉选择框不想手写&#xff0c;并且需要从数据库读取&#xff0c;由于直接设置excel会有单元格最大255个字符长度限制&#xff0c;所以用到以下部分代码。 思路&#xff1a;由于数据模板在sh…

MySQL 的事务概念

事务概念 MySQL事务是一个或者多个的数据库操作&#xff0c;要么全部执行成功&#xff0c;要么全部失败回滚。 事务是通过事务日志来实现的&#xff0c;事务日志包括&#xff1a;redo log和undo log。 事务状态 事务有以下五种状态&#xff1a; 活动的部分提交的失败的中止的…
最新文章