ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

[Lintcode] 932. Beautiful Array

2019-07-27 14:55:08  阅读:232  来源: 互联网

标签:Beautiful tmp used dic set nouse 932 Array copy


Leetcode:932. Beautiful Array 

  • 本题难度: Hard
  • Topic: divide-and-conquer

    Description

For some fixed N, an array A is beautiful if it is a permutation of the integers 1, 2, ..., N, such that:

For every i < j, there is no k with i < k < j such that A[k] * 2 = A[i] + A[j].

Given N, return any beautiful array A.  (It is guaranteed that one exists.)

Example 1:

Input: 4
Output: [2,1,4,3]
Example 2:

Input: 5
Output: [3,1,2,5,4]

Note:

1 <= N <= 1000

我的代码 


import copy
import collections
class Solution:
    def beautifulArray(self,N):
        memo = {1: [1]}
        def f(N):
            if N not in memo:
                odds = f((N+1)//2)
                evens = f(N//2)
                memo[N] = [2*x-1 for x in odds] + [2*x for x in evens]
            return memo[N]
        return f(N)

超时的代码 


noUse = {i+1 for i in range(N)}
use = collections.OrderedDict()
stack = [[use,noUse]]
while(len(stack)>0):
    [used_dic, nouse_set] = stack.pop()
    if len(nouse_set) == 0:
        return [item for item in used_dic]
    for toUse in nouse_set:
        f = 0
        for used in used_dic:
            tmp = used_dic.get((used+toUse)//2,-1)
            if tmp>used_dic[used]:
                f = 1
                break
            if toUse*2-used in nouse_set:
                f = 1
                break
        if f == 1:
            continue
        tmp_set = copy.copy(nouse_set)
        tmp_set.remove(toUse)
        tmp_dic = copy.copy(used_dic)
        tmp_dic[toUse] = len(used_dic)-1
        stack.append([tmp_dic,tmp_set])

思路

分治的思想,对左右半边来说,第一个数只取左边,第二个数只取右边,如果左右两边,一边奇数,一边偶数,则其平均数不会出现。

标签:Beautiful,tmp,used,dic,set,nouse,932,Array,copy
来源: https://www.cnblogs.com/siriusli/p/11255029.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有