当前位置: 首页 > news >正文

【反证法】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++**实现。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 使用php adodb5连接人大金仓数据库
  • 揭秘Django与Neo4j:构建智能知识图谱的终极指南
  • Adam 和 RMSprop优化算法
  • 每日任务:HTTP状态码详解及强缓存与协商缓存的区别
  • EXO-chatgpt_api 解释
  • 常见的文心一言的指令
  • 力扣面试题(三)
  • .Net Core 微服务之Consul(三)-KV存储分布式锁
  • ARM编程指令一
  • STM32--HAL库--定时器篇
  • 堆的基本实现
  • mysql中提供的函数
  • 独孤思维:长线副业,越做越香
  • C语言常见字符函数和字符串函数精讲
  • connect的非阻塞模式
  • crontab执行失败的多种原因
  • css布局,左右固定中间自适应实现
  • css属性的继承、初识值、计算值、当前值、应用值
  • KMP算法及优化
  • Leetcode 27 Remove Element
  • node和express搭建代理服务器(源码)
  • PHP的Ev教程三(Periodic watcher)
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • vue.js框架原理浅析
  • windows下使用nginx调试简介
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 理解在java “”i=i++;”所发生的事情
  • 普通函数和构造函数的区别
  • 携程小程序初体验
  • 源码安装memcached和php memcache扩展
  • Spring Batch JSON 支持
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • (1)Jupyter Notebook 下载及安装
  • (3)STL算法之搜索
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (二)换源+apt-get基础配置+搜狗拼音
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (六)vue-router+UI组件库
  • (万字长文)Spring的核心知识尽揽其中
  • (一)VirtualBox安装增强功能
  • (转)四层和七层负载均衡的区别
  • .net Signalr 使用笔记
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .NET编程C#线程之旅:十种开启线程的方式以及各自使用场景和优缺点
  • .net企业级架构实战之7——Spring.net整合Asp.net mvc
  • .net下的富文本编辑器FCKeditor的配置方法
  • .Net中间语言BeforeFieldInit
  • .NET周刊【7月第4期 2024-07-28】
  • @reference注解_Dubbo配置参考手册之dubbo:reference
  • [100天算法】-不同路径 III(day 73)
  • [240812] X-CMD 发布 v0.4.5:更新 gtb、cd、chat、hashdir 模块功能
  • [28期] lamp兄弟连28期学员手册,请大家务必看一下