- 921. Minimum Add to Make Parentheses Valid 使括号有效的最少添加
- 915. Partition Array into Disjoint Intervals 分割数组
- 932. Beautiful Array 漂亮数组
- 940. Distinct Subsequences II 不同的子序列 II
题目地址:https://leetcode.com/problems/beautiful-array/description/
Forsome fixed N, an array A is beautiful if it is a permutation of the integers 1, 2, ..., N, such that:
Forevery 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.)
Ví dụ 1:
Input: 4 Output: [2,1,4,3]
Example 2:
Input: 5 Output: [3,1,2,5,4]
Note:
1、 1<=N<=1000;
给出从1到N的数组的一个排列,使得任意两个数字之间不存在他们的平均数。
因为题目要求任意两个数的平均数不能在他们中间,如果一个数字左边都是奇数,右边都是偶数,那么肯定这个数字的二倍是偶数,肯定不会存在A[k] * 2 = A[i] + A[j]
.
若数组A满足上面的条件,那么很容易从线性关系中看出来,对于A中的每个元素做[2 * i for i in A]
后者[2 * i - 1 for i in A]
依然满足上面的条件。
所以我们从最简单的1open in new window开始推导,构造奇数+偶数拼接在一起成为新的数组,然后继续这个操作,就能使得得到的一直是满足条件的数组。最后当数组的长度满足条件就结束。因为结果数组的长度是2的整数次方,所以最后要把结果中小于等于N的留下来就行了。
时间复杂度是O(NlogN),空间复杂度是O(N).打败100%。
class Solution(object): def beautifulArray(self, N): """ :type N: int :rtype: List[int] """ res = [1] while len(res) < N: res = [2 * i - 1 for i in res] + [2 * i for i in res] return [i for i in res if i <= N]
1 2 3 4 5 6 7 8 9 10
可以把上面的方法改成递归写法。思想是类似的,只不过要注意的是因为N可能是偶数也可能是奇数,当是奇数的时候除以二的时候可能丢失了一个奇数,所以小于N的奇数个数是N / 2 + N % 2
.
时间复杂度是O(NlogN),空间复杂度是O(NlogN).打败25%。
class Solution(object): def beautifulArray(self, N): """ :type N: int :rtype: List[int] """ if N == 1: return [1] odd = [i * 2 - 1 for i in self.beautifulArray(N / 2 + N % 2)] even = [i * 2 for i in self.beautifulArray(N / 2)] return odd + even
1 2 3 4 5 6 7 8 9 10
推荐寒神的视频:https://www.youtube.com/watch?v=9L6bPGDfyqo&t=41s
DDKK.COM 弟弟快看-教程,程序员编程资料站,版权归原作者所有
本文经作者:负雪明烛 授权发布,任何组织或个人未经作者授权不得转发
Trong C: int a[10]; printf("%p\n", a); printf("%p\n", &a[0]); Đầu ra: 0x7fff5606c600 0x7fff5606c600 là những gì tôi mong đợi
Tôi đã thử chạy vòng lặp này để thay đổi vị trí của một phần tử dựa trên một mảng nhưng tôi nhận được lỗi sau. Không chắc chắn lắm về chuyện gì đã xảy ra. Có suy nghĩ hay ý tưởng nào không! Cảm ơn. dân số var = [[98, 8, 45, 34, 56], [9, 1
Tôi đang cố gắng lấy một mảng các mảng Ruby và nhóm chúng lại để tính toán giá trị của chúng. Một mảng có một tháng và một giá trị bool: array = [["Tháng sáu", false], ["Tháng sáu", false], ["Tháng sáu"
Vì vậy, mục tiêu của chúng ta là chia mảng thành các mảng con khi gặp một phần tử nhất định. Ví dụ sau array.split("stop here") ["haii", "keep", "these in the same array bu
Câu hỏi này trả lời rằng cả hai biểu thức đều như nhau, nhưng trong trường hợp này chúng cho ra kết quả khác nhau. Đối với một số điểm int[] nhất định, tại sao lại như thế này: Arrays.stream(scores).forEac
Tôi nghĩ thứ tôi cần là một mảng các giá trị băm, nhưng tôi không biết cách tạo ra nó. Perl có thể làm được điều đó không? Nếu vậy, mã sẽ trông như thế nào? Câu trả lời hay nhất perldoc perldsc là một tài liệu tốt để hiểu về cấu trúc dữ liệu Perl. Về Arra
Tôi gặp vấn đề này, từ API, tôi nhận được một JSON mở rộng chứa một đối tượng có tên là tọa độ, vốn là một mảng chứa nhiều mảng. Để xem ví dụ này rõ hơn: "coordinates": [
Trong postgres có (v 9.5, nếu quan trọng): tạo bảng json_test( id varchar NOT NULL, data jsonb NOT NULL, PRIM
Tôi đã sử dụng echo "${array[@]}" và echo "${array[*]}" và nhận được kết quả tương tự. Nếu tôi làm thế này: mkdir fakemusic; touch fakemusic/{Beatles,Sto
Tôi đang cố gắng tạo một mảng các mảng đối tượng typealias - nhưng tôi nhận được lỗi biên dịch "Kiểu biểu thức không rõ ràng khi không có thêm ngữ cảnh". Đây là mã của tôi: typealias TestClosure = ((message: St
Nếu bạn tạo mảng 1 chiều trong Python, thì việc sử dụng gói NumPy có lợi ích gì không? Câu trả lời hay nhất Điều này hoàn toàn phụ thuộc vào mục đích bạn định sử dụng mảng. Nếu tất cả những gì bạn làm là tạo các mảng có kiểu dữ liệu đơn giản và thực hiện I/O thì mô-đun mảng là phù hợp. Khác
Tại sao tôi lại nhận được cấu trúc dữ liệu này khi tôi đẩy một mảng vào một mảng các mảng chỉ có một mảng là phần tử duy nhất? sử dụng v6; @d của tôi = ( [ 1 .. 3 ] ); @d.push( [ 4 .. 6 ] ); @d.
Trong Julia, tôi muốn chuyển đổi dữ liệu được định nghĩa là mảng vectơ 2D thành mảng ma trận 2D. Như mô tả trong ví dụ sau, tôi muốn chuyển đổi dữ liệu s thành dữ liệu t nhưng cho đến nay vẫn chưa thành công. Tôi nên xử lý trường hợp này thế nào? julia> s = [[1 2 3], [4
C không có từ khóa elementsof để lấy số lượng phần tử trong một mảng. Vì vậy, điều này thường được thay thế bằng cách tính sizeof(Array)/sizeof(Array[0]) nhưng điều này đòi hỏi phải lặp lại tên biến mảng. 1[&Array] là con trỏ đến phần tử đầu tiên
Vì vậy, giả sử tôi có một hàm (ngớ ngẩn) như thế này: function doSomething(input: number|string): boolean { if (input === 42 || in
Tôi có mảng sau: a = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16] và tôi sử dụng nó cho một số thứ trực quan như thế này: 1 2 3 4 5 6 7 8 9 10
Tôi muốn biết sự khác biệt giữa .toList và .to[List] trong một mảng là gì. Tôi đã thực hiện thử nghiệm này trong spark-shell và không có sự khác biệt nào trong kết quả, nhưng tôi không biết nên sử dụng phương pháp nào tốt hơn. Có lời khuyên nào không? scala> val l = Arr
Tôi đang gặp sự cố khi lấy chỉ mục phần tử hiện tại cho nhiều phần tử của cùng một đối tượng: $b = "A","D","B","D","C","E","D","F" $b | ? { $_ -chứa "D" } Phiên bản thay thế: $b =
Tôi đang cố gắng thực hiện các tùy chọn với v-select đến từ API của mình, tôi có dữ liệu trong một mảng các mảng. Mảng mà tôi lấy từ API Nó phải là một lựa chọn với tìm kiếm vì nó
Câu hỏi này đã có câu trả lời tại đây: Chuỗi ký tự: con trỏ so với mảng char (1 câu trả lời) Đã đóng 4 tháng trước. Khi tôi thực thi mã tiếp theo int main() {
Tôi là một lập trình viên xuất sắc, rất giỏi!