【反证法】932. 漂亮数组

本文涉及知识点

分治 数学 反证法

LeetCode932. 漂亮数组

如果长度为 n 的数组 nums 满足下述条件,则认为该数组是一个 漂亮数组 :
nums 是由范围 [1, n] 的整数组成的一个排列。
对于每个 0 <= i < j < n ,均不存在下标 k(i < k < j)使得 2 * nums[k] == nums[i] + nums[j] 。
给你整数 n ,返回长度为 n 的任一 漂亮数组 。本题保证对于给定的 n 至少存在一个有效答案。
示例 1 :
输入:n = 4
输出:[2,1,4,3]
示例 2 :
输入:n = 5
输出:[3,1,2,5,4]
提示:
1 <= n <= 1000

反证法

性质一:漂亮数组A各元素乘以m(m > 0 )形成的数组B是漂亮数组。用反证法证明:
假定存在2B[k] = B[i]+B[j],则2B[k]/m = B[i]/m + B[j]/m。即A也不是漂亮数组,与假设矛盾。
性质二:漂亮数组A各元素加上m形成数组B,也是漂亮数组。证明类似性质一。
性质三:漂亮数组A删除若干元素,仍然是漂亮数组。可用反证法证明。
性质四:漂亮数组A全部是奇数,漂亮数组B全部是偶数。则A+B 也是漂亮数组。如:A = {1,3} B = {2,4},则{1,3,2,4}也是漂亮数组。下面分类讨论:
{ A 是漂亮数组 i , j ∈ A B 是漂亮数组 i , j ∈ B n u m s [ i ] + n u m s [ j ] 是奇数, 2 × n u m s [ k ] 是偶数,两者不会相等。 i ∈ A , j ∈ B \begin{cases} A是漂亮数组 && i,j\in A \\ B是漂亮数组 && i,j \in B \\ nums[i]+nums[j]是奇数,2 \times nums[k]是偶数,两者不会相等。 && i \in A,j \in B \\ \end{cases} A是漂亮数组B是漂亮数组nums[i]+nums[j]是奇数,2×nums[k]是偶数,两者不会相等。i,jAi,jBiA,jB

思路

n = 1 arr1 = {1}
n = 2 arr2 = (arr1 × \times × 2-1)+(arr1 × \times × 2)
n=4 arr4 = (arr2 × \times × 2-1)+(arr2 × \times × 2)
⋯ \cdots
如果n 不是2的m次幂,则抛弃大于n的数。

代码

class Solution {
public:vector<int> beautifulArray(int n) {vector<int> pre = { 1 };		while (pre.size() < n) {vector<int> dp;auto Add = [&](int val) {if (val > n) { return; }dp.emplace_back(val);};for (int i = 0; i < pre.size(); i++) {Add(pre[i] * 2 - 1);}for (int i = 0; i < pre.size(); i++) {Add(pre[i] * 2 );}pre.swap(dp);}return pre;}
};

扩展阅读

视频课程

先学简单的课程,请移步CSDN学院,听白银讲师(也就是鄙人)的讲解。
https://edu.csdn.net/course/detail/38771

如何你想快速形成战斗了,为老板分忧,请学习C#入职培训、C++入职培训等课程
https://edu.csdn.net/lecturer/6176

相关推荐

我想对大家说的话
《喜缺全书算法册》以原理、正确性证明、总结为主。
按类别查阅鄙人的算法文章,请点击《算法与数据汇总》。
有效学习:明确的目标 及时的反馈 拉伸区(难度合适) 专注
闻缺陷则喜(喜缺)是一个美好的愿望,早发现问题,早修改问题,给老板节约钱。
子墨子言之:事无终始,无务多业。也就是我们常说的专业的人做专业的事。
如果程序是一条龙,那算法就是他的是睛

测试环境

操作系统:win7 开发环境: VS2019 C++17
或者 操作系统:win10 开发环境: VS2022 C++17
如无特殊说明,本算法用**C++**实现。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python练手小项目

计算器 创建一个简单的计算器&#xff0c;能够进行加、减、乘、除四种基本运算。 # 定义加法函数 def add(x, y):return x y# 定义减法函数 def subtract(x, y):return x - y# 定义乘法函数 def multiply(x, y):return x * y# 定义除法函数 def divide(x, y):if y 0:return…

华为Ascend C算子开发(中级)考试

华为Ascend C算子开发&#xff08;中级&#xff09;考试题 提示&#xff1a;这个是河北廊坊Ascend C算子开发考试题和答案&#xff0c;仅供参考&#xff0c;因为不确定其他城市的考试题是否也是一样 文章目录 华为Ascend C算子开发&#xff08;中级&#xff09;考试题一、op_ho…

kafka源码阅读-Broker如何处理生产者的消息写入请求

概述 Kafka源码包含多个模块&#xff0c;每个模块负责不同的功能。以下是一些核心模块及其功能的概述&#xff1a; 服务端源码 &#xff1a;实现Kafka Broker的核心功能&#xff0c;包括日志存储、控制器、协调器、元数据管理及状态机管理、延迟机制、消费者组管理、高并发网络…

端到端自动驾驶科普向

从设计思想看&#xff0c;自动驾驶系统分为模块化和黑箱化两个大类。前者将系统分解为一系列功能独立的模块&#xff0c;每一个模块单独设计&#xff0c;组合到一起实现自动驾驶功能&#xff08;我们熟知的定位 感知 规划 控制 决策等模块&#xff09;&#xff1b;后者又称为端…

Python爬虫技术 第13节 HTML和CSS选择器

在爬虫技术中&#xff0c;解析和提取网页数据是核心部分。HTML 和 CSS 选择器被广泛用于定位网页中的特定元素。下面将详细介绍这些选择器如何在 Python 中使用&#xff0c;特别是在使用像 Beautiful Soup 或 Scrapy 这样的库时。 HTML 选择器 HTML 选择器基于 HTML 元素的属性…

基于微信小程序+SpringBoot+Vue的美食推荐平台(带1w+文档)

基于微信小程序SpringBootVue的美食推荐平台(带1w文档) 基于微信小程序SpringBootVue的流浪动物救助(带1w文档) 当微信小程序占领了多半江山&#xff0c;目前不分年龄和种族&#xff0c;使用频率最高&#xff0c;覆盖面积最广。使用人群使用的大多数都是微信小程序。目前国内最…

Kithara和Halcon (二)

Kithara使用Halcon QT 进行二维码实时识别 目录 Kithara使用Halcon QT 进行二维码实时识别Halcon 简介以及二维码检测的简要说明Halcon 简介Halcon的二维码检测功能 Qt应用框架简介项目说明关键代码抖动测试测试平台&#xff1a;测试结果&#xff1a; 开源源码 Halcon 简介以…

STM32CubeMX的介绍与简单使用

STM32CubeMX提供了一个直观的图形用户界面&#xff0c;允许用户通过简单的操作完成对STM32微控制器的配置&#xff0c;包括引脚分配、时钟配置、外设初始化等。专为STM32微控制器设计&#xff0c;旨在帮助开发者轻松配置和初始化STM32微控制器。用户可以通过拖拽和连接来配置芯…

关键词查找【Aho-Corasick 算法】

【全程干货】程序员必备算法&#xff01;AC自动机算法敏感词匹配算法&#xff01;动画演示讲解&#xff0c;看完轻松掌握&#xff0c;面试官都被你唬住&#xff01;&#xff01;_哔哩哔哩_bilibili 著名的多模匹配算法 引入依赖&#xff1a; <dependency><groupId>…

Vue3 Pinia/组件通信

2. pinaia 符合直觉的Vue.js状态管理库 集中式状态&#xff08;数据&#xff09;管理 官网 2.1 搭建pinaia环境 第一步&#xff1a;npm install pinia 第二步&#xff1a;操作src/main.ts import { createApp } from vue import App from ./App.vue/* 引入createPinia&…

37 Debian如何配置GlusterFS 10

作者:网络傅老师 特别提示:未经作者允许,不得转载任何内容。违者必究! Debian如何配置GlusterFS 10 《傅老师Debian知识库系列之37》——原创 ==前言== 傅老师Debian知识库特点: 1、拆解Debian实用技能; 2、所有操作在VMware虚拟机实测完成; 3、致力于最终形成Debian…

Java面试八股之什么是声明式事务管理,spring怎么实现声明式事务管理?

什么是声明式事务管理&#xff0c;spring怎么实现声明式事务管理&#xff1f; 声明式事务管理是一种编程范式&#xff0c;它允许开发人员通过声明性的配置或注解&#xff0c;而不是硬编码事务处理逻辑&#xff0c;来指定哪些方法或类应该在其上下文中执行事务。这种方法将事务…

13.CSS 打印样式表 悬停下划线动画

CSS 打印样式表 虽然我们不经常从网上实际打印内容,但打印样式表不应被忽视。它们可以用来确保你的网站内容以一种易读和适合打印的方式呈现。这里有一个简单的、独特的打印样式表,你可以用它作为自己的基础: media print {page {size: A4;}body {margin: 0;padding: 0;}body, …

【PHP】系统的登录和注册

一、为什么要学习系统的登录和注册 系统的登录和注册可能存在多种漏洞&#xff0c;这些漏洞可能被恶意攻击者利用&#xff0c;从而对用户的安全和隐私构成威胁。通过学习系统的登录和注册理解整个登录和注册的逻辑方便后续更好站在开发的角度思考问题发现漏洞。以下是一些常见…

Linux取消U盘自动挂载

Ubuntu 或其他GNOME桌面环境 打开“设置”&#xff1a; 点击桌面右上角的系统菜单&#xff0c;然后点击“设置”。 找到“可移动媒体”&#xff1a; 在设置窗口中&#xff0c;点击左侧的“可移动媒体”选项&#xff08;有些版本中&#xff0c;这个选项可能在“设备”或“文件”…

Husky 入门

Husky 是一个流行的 Node.js 工具&#xff0c;用于管理 Git 钩子。Git 钩子是在特定 Git 操作&#xff08;如提交、推送等&#xff09;发生时自动触发的脚本。Husky 允许你轻松地为你的项目添加这些钩子&#xff0c;以便在代码提交或推送之前自动执行检查、测试或其他任务。 安…

Eslint从安装到Vue项目配置

ESLint是一个静态代码分析工具&#xff0c;用于识别JavaScript代码中的模式&#xff0c;帮助开发者发现并修复代码中的问题。以下是从安装到在Vue 2项目中整合使用ESLint的详细步骤&#xff1a; 一、ESLint的安装 1. 全局安装&#xff08;可选&#xff09; 虽然全局安装ESLi…

JDK 21 中的虚拟线程与 Future

在 JDK 21 中&#xff0c;虚拟线程与 Future 的结合为异步编程提供了更强大和高效的解决方案。 Future 代表了异步计算的结果&#xff0c;通过它可以获取计算的状态和最终的结果。当与虚拟线程一起使用时&#xff0c;可以更灵活地管理和协调异步任务。 例如&#xff0c;在一个数…

C++第二十七弹---优先级队列的高级应用:结合仿函数优化性能

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 目录 1 priority_queue的介绍和使用 1.1 priority_queue的介绍 1.2 priority_queue的使用 2 仿函数的介绍和使用 2.1 仿函数的介绍 2.2 仿函数的…

Python升级打怪—Django入门

目录 一、Django简介 二、安装Django 三、创建Dajngo项目 (一) 创建项目 (二) 项目结构介绍 (三) 运行项目 (四) 结果 一、Django简介 Django是一个高级Python web框架&#xff0c;鼓励快速开发和干净、实用的设计。由经验丰富的开发人员构建&#xff0c;它解决了web开…