LeetCode 932. 漂亮数组(分治递归/循环)

   日期:2020-05-24     浏览:142    评论:0    
核心提示:文章目录1. 题目2. 解题2.1 分治递归2.2 循环1. 题目对于某些固定的 N,如果数组 A 是整数 1, 2, …, N 组成的排列,使得:对于每个 i < j,都不存在 k 满足 i < k < j 使得 A[k] * 2 = A[i] + A[j]。那么数组 A 是漂亮数组。给定 N,返回任意漂亮数组 A(保证存在一个)。示例 1:输入:4输出:[2,1,4,3]示例 2:输入:5输出:[3,1,2,5,4] 提示:1 <= N <=数据结构与算法

文章目录

    • 1. 题目
    • 2. 解题
      • 2.1 分治递归
      • 2.2 循环

1. 题目

对于某些固定的 N,如果数组 A 是整数 1, 2, …, N 组成的排列,使得:

对于每个 i < j,都不存在 k 满足 i < k < j 使得 A[k] * 2 = A[i] + A[j]

那么数组 A 是漂亮数组。

给定 N,返回任意漂亮数组 A(保证存在一个)。

示例 1:
输入:4
输出:[2,1,4,3]

示例 2:
输入:5
输出:[3,1,2,5,4]
 
提示:
1 <= N <= 1000

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/beautiful-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

引用漂亮数组的一些性质

漂亮数组有以下的性质:

(1)A是一个漂亮数组,如果对A中所有元素添加一个常数(+b),那么A还是一个漂亮数组。

(2)A是一个漂亮数组,如果对A中所有元素乘以一个常数(*k),那么A还是一个漂亮数组。

(3)A是一个漂亮数组,如果删除一些A中一些元素,那么A还是一个漂亮数组。

(4)A是一个奇数构成的漂亮数组,B是一个偶数构成的漂亮数组,那么A+B也是一个漂亮数组

2.1 分治递归

class Solution {
public:
    vector<int> beautifulArray(int N) {
    	if(N == 1)
    		return {1};
    	vector<int> odd = beautifulArray((N+1)/2);
    	vector<int> even = beautifulArray(N/2);
    	vector<int> ans;
    	for(int i : odd)
    		ans.push_back(i*2-1);
    	for(int i : even)
    		ans.push_back(i*2);
    	return ans;
    }
};

28 ms 18 MB

2.2 循环

class Solution {
public:
    vector<int> beautifulArray(int N) {
    	vector<int> temp = {1};
    	int i, j = 0, len;
    	while(temp.size() < N)
    	{
    		len = temp.size();
    		for(i = 0; i < len; ++i)
    			temp[i] = 2*temp[i]-1;
    		for(i = 0; i < len; ++i)
    			temp.push_back(temp[i]+1);
    	}
    	vector<int> ans(N);
    	for(i = 0; i < temp.size(); ++i)
    	{
    		if(temp[i] <= N)
    			ans[j++] = temp[i];
    	}
    	return ans;
    }
};

4 ms 7.2 MB

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服