初学python记录:力扣2007. 从双倍数组中还原原数组

news/2024/5/17 13:18:53

题目:

一个整数数组 original 可以转变成一个 双倍 数组 changed ,转变方式为将 original 中每个元素 值乘以 2 加入数组中,然后将所有元素 随机打乱 。

给你一个数组 changed ,如果 change 是 双倍 数组,那么请你返回 original数组,否则请返回空数组。original 的元素可以以 任意 顺序返回。

提示:

  • 1 <= changed.length <= 10^5
  • 0 <= changed[i] <= 10^5

思考:

数组original中每个元素乘以2加入数组中,得到数组changed ---->

1. 数组changed一定有偶数个元素

2. 数组changed的元素从小到大遍历,设当前元素为x,那么 x*2 一定另外存在于数组changed中,每次判断完后将当前这两个元素从changed中删去,继续向下判断。

代码如下:

class Solution(object):def findOriginalArray(self, changed):""":type changed: List[int]:rtype: List[int]"""original = []n = len(changed)i = 0if n % 2 == 1:return[]changed.sort()while i < n:x = changed[i]original.append(x)changed.remove(x)i -= 1n -= 1if x * 2 not in changed:return []else:changed.remove(x * 2)n -= 1i += 1return original

提交后卡在例子 176 / 179  超时了:

可以看到这一句判断语句每判断一次都要遍历一次数组,大大增加了耗时:

if x * 2 not in changed:return []

那么直接在最开始统计changed中每个元素的出现次数即可,代码如下:

from collections import Counterclass Solution(object):def findOriginalArray(self, changed):""":type changed: List[int]:rtype: List[int]"""original = []n = len(changed)i = 0if n % 2 == 1:return[]changed.sort()count = Counter(changed)for x in changed:if count[x] >= 1:y = x * 2original.append(x)count[x] -= 1if count[y] < 1:return []else:count[y] -= 1return original

提交通过:

 


http://www.mrgr.cn/p/01570788

相关文章

shell系统函数和流程控制

系统函数: 1、简单示例:点击查看代码 #!/bin/bash filename="$1"_log_$(datename +%S) echo $filenamebasename:基本语法: basename [string/pathname] [suffix] (功能描述:basename命令会删掉所有的前缀包括最后一个(/)字符,然后将左右字符显示出来。 basename…

RocketMQ并发消息消费重试DEMO

无序消息的重试只针对集群消费模式生效&#xff1b;广播消费模式不提供失败重试特性 Producer 发了100个对象消息 public class AddProducer {public static void main(String[] args) throws Exception {DefaultMQProducer producer new DefaultMQProducer("a-group&q…

春秋云境:CVE-2022-32991[漏洞复现]

从CVE官网查询该漏洞相关信息 该漏洞是由于welcome.php中的eid参数包含了SQL注入漏洞 则我们的目标就在于寻找welcome.php地址以及相关的可注入eid参数 开启靶机 先在页面正常注册、登录一个账号。密码随便填 进入了home目录&#xff0c;这里有三个话题可以选择开启 随便选…

模拟电路学习笔记——晶体管电流放大作用

基本共射放大电路△u1为输入电压信号,接入基极——发射极回路,称为输入回路;放大后的信号在集电极——发射极回路,称为输出回路;因发射极是两个回路的公共端,故称该电路为共射放大电路晶体管工作在放大状态的外部条件:发射结正向偏置,集电结反向偏置输入回路中基极电源…

MATLAB偏最小二乘回归(PLSR)和主成分回归(PCR)分析光谱数据

全文链接:http://tecdat.cn/?p=2655 最近我们被客户要求撰写关于偏最小二乘回归(PLSR)和主成分回归(PCR)的研究报告,包括一些图形和统计输出。 此示例显示如何在matlab中应用偏最小二乘回归(PLSR)和主成分回归(PCR),并讨论这两种方法的有效性 当存在大量预测变量时…

UE5 C++ 射线检测

一.声明四个变量 FVector StartLocation;FVector ForwardVector;FVector EndLocation;FHitResult HitResult;二.起点从摄像机&#xff0c;重点为摄像机前9999m。射线检测 使用LineTraceSingleByChannel 射线直线通道检测&#xff0c;所以 void AMyCharacter::Tick(float Delt…

matlab使用经验模式分解emd 对信号进行去噪

原文链接 : http://tecdat.cn/?p=2567 原文出处:拓端数据部落公众号对于这个例子,考虑由具有明显频率变化的正弦波组成的非平稳连续信号。手提钻的振动或烟花声是非平稳连续信号的例子。 以采样频率加载非平稳信号数据fs,并可视化混合正弦信号。 htmlload(sinusoidalSigna…

Spring Boot 学习(3)——Spring Initializr 创建项目问题解决

产生问题的原因&#xff0c;各种的版本都较老&#xff0c;所以导致出现问题。目前暂未打到合适的教程&#xff0c;按老教程学起来先。 小白瞎学&#xff0c;大神勿喷&#xff01; 再次强调环境&#xff1a;maven 3.3.9、jdk 1.8、idea 2017、Spring 4.3.13、Spring Boot 1.5.…

Linux学习之路 -- PCB介绍 -- 进程优先级

1、什么是优先级&#xff1f; 进程需要某一种资源&#xff0c;而系统要通过特定的方式来决定谁先获得这些资源&#xff0c;而系统的做法就是给不同的进程安排不同的优先级。让优先级高的进程先享有一些资源。 2、为什么要有优先级 因为资源的缺乏&#xff0c;所以系统的才会…

linux进程与计划(2)

五大性能性能 命令内存使用率 free,topCPU使用率 top,ps,w硬盘使用率 df硬盘读写性能 dd,iostat网络带宽 iftopps -ef 命令输出信息 如果不想看到所有的进程,只想查看一下当前登录产生了哪些进程,那只需使用 "ps -l" 命令就足够了 CPU 在运算数据时,不是把一个集成…

软件产品许可证书 Licence 全流程研发(使用非对称加密技术,既安全又简单)

本篇博客对应的代码地址&#xff1a; Gitee 仓库地址&#xff1a;https://gitee.com/biandanLoveyou/licence 1、背景介绍 公司是做软件 SAAS 服务的&#xff0c;一般来说软件部署有以下几种常见的模式&#xff1a; 1、自己研发和部署到自己的云服务器&#xff0c;然后有偿提供…

ts中的dom元素和event事件类型声明

1, HTMLElement 和 Element<div id="divClick"></div>const docu = document.getElementById(divClick);const docu1 = document.querySelector(#divClick);把鼠标分别放在docu和docu1上:HTMLElement HTMLElement 是 HTML 文档中某个元素的具体类型,该…

debian安装和基本使用

debian安装和基本使用 文章目录 debian安装和基本使用1. 为什么选择debian2. 如何下载Debian2.1 小型安装镜像2.2 完整安装镜像 3. Debian操作系统安装3.1 创建Debian虚拟机3.2 安装操作系统 4. Debian系统的初始设置4.1 桌面环境的配置4.2 配置网络4.3 生效网络配置4.4 配置de…

大模型日报|今日必读的6篇大模型论文

大家好&#xff0c;今日必读的大模型论文来啦&#xff01; 1.Google DeepMind 新研究&#xff1a;多样本上下文学习 目前&#xff0c;大型语言模型&#xff08;LLMs&#xff09;最擅长的是 “少样本上下文学习”&#xff08;ICL&#xff09;—— 即在推理时从上下文中提供的少…

反转二叉树(力扣226)

解题思路&#xff1a;用队列进行前序遍历的同时把节点的左节点和右节点交换 具体代码如下&#xff1a; class Solution { public:TreeNode* invertTree(TreeNode* root) {if (root NULL) return root;swap(root->left, root->right); // 中invertTree(root->left)…

C# Lock锁对象的理解

我们lock的一般是对象,不是值类型和字符串。1、为什么不能lock值类型比如lock(1)呢?lock本质上Monitor.Enter,Monitor.Enter会使值类型装箱,每次lock的是装箱后的对象。lock 其实是类似编译器的语法糖,因此编译器直接限制住不能lock值类型。退一万步说,就算能编译器允许你…

GPT国内怎么用?4月最新版本来了

ChatGPT镜像 今天在知乎看到一个问题&#xff1a;“平民不参与内测的话没有账号还有机会使用ChatGPT吗&#xff1f;” 从去年GPT大火到现在&#xff0c;关于GPT的消息铺天盖地&#xff0c;真要有心想要去用&#xff0c;途径很多&#xff0c;别的不说&#xff0c;国内GPT的镜像…

腾讯云APP备案指南:一站式完成备案手续,助您顺利上线

工信部最新通知要求所有互联网信息服务提供者完成移动互联网应用程序备案手续。腾讯云为开发者提供了简单易行的备案流程,本文详细解答如何在腾讯云平台完成备案,帮助开发者快速上线自己的APP。从验证备案域名到腾讯云审核,一步步指导您完成备案流程,让您的APP合法合规地运…

windows系统添加自启动服务

windows 添加程序自动启动:shell:startup将需要启动的应用的启动入口,创建一个快捷键,然后将其放入该文件夹中