https. //www. hackerrank. com/challenges/circular-array-rotation/problem?utm_campaign=challenge-recommendation&utm_medium=email&utm_source=chiến dịch 24 giờ
Điều này làm tôi mất khoảng năm phút
Đây không thực sự là về cách tôi giải quyết vấn đề, mặc dù tôi sẽ nói ngắn gọn về điều đó
https. // stackoverflow. com/câu hỏi/2150108/efficiency-way-to-shift-a-list-in-python
Tôi đã tự hỏi mình/google "dịch chuyển mảng python sang phải" và được nhắc rằng có tồn tại
def circularArrayRotation[a, k, queries]:
from collections import deque
items = deque[a]
items.rotate[k]
ret_list = []
for q in queries:
print[items[q]]
5 và def circularArrayRotation[a, k, queries]:
from collections import deque
items = deque[a]
items.rotate[k]
ret_list = []
for q in queries:
print[items[q]]
6. Tôi đã sử dụng chúng trước đây. Python có rất nhiều công cụ tuyệt vời mà tôi quên mất mọi lúc. Bạn không thể phạt ai đó vì không nhớ mọi thứdef circularArrayRotation[a, k, queries]:
from collections import deque
items = deque[a]
items.rotate[k]
ret_list = []
for q in queries:
#print[items[q]]
ret_list.append[items[q]]
return ret_list
Bây giờ, một điều thú vị mà bạn sẽ lưu ý là tôi đã nhận xét câu lệnh in trong vòng lặp
Khi tôi lần đầu tiên viết chức năng, nó trông như thế này
def circularArrayRotation[a, k, queries]:
from collections import deque
items = deque[a]
items.rotate[k]
ret_list = []
for q in queries:
print[items[q]]
Bây giờ, đây chính xác là những gì mô tả vấn đề yêu cầu
"Đối với mỗi truy vấn, hãy in giá trị của phần tử tại chỉ mục của mảng đã xoay trên một dòng mới. "
Tôi nghĩ rằng tôi đã làm điều đó, nhưng sau đó trình biên dịch/trình kiểm tra HackerRank bị lỗi
Compiler Message
Runtime Error
Error [stderr]
Traceback [most recent call last]:
File "Solution.py", line 42, in
fptr.write['\n'.join[map[str, result]]]
TypeError: 'NoneType' object is not iterable
Input [stdin]
3 2 3
1 2 3
0
1
2
Vì vậy, tôi đi "Hmmm. " và kiểm tra chính
if __name__ == '__main__':
fptr = open[os.environ['OUTPUT_PATH'], 'w']
nkq = input[].split[]
n = int[nkq[0]]
k = int[nkq[1]]
q = int[nkq[2]]
a = list[map[int, input[].rstrip[].split[]]]
queries = []
for _ in range[q]:
queries_item = int[input[]]
queries.append[queries_item]
result = circularArrayRotation[a, k, queries]
fptr.write['\n'.join[map[str, result]]]
fptr.write['\n']
fptr.close[]
Phần quan trọng là đây
result = circularArrayRotation[a, k, queries]
Có vẻ như họ muốn một giá trị trả lại. à há. Sau đó tôi hiểu những gì tôi đã làm sai
Xem, gỡ lỗi rất dễ dàng
Vì vậy, tôi đã nhận xét câu lệnh in và xây dựng một danh sách các mục để trả về các tham số đã cho và BAM. 100% trong các bài kiểm tra
Vài đêm trước, tôi đã tăng từ hạng 900.000 lên hạng 600.000 trên HackerRank. Vừa rồi mình chuyển lên 544328
Thành thật mà nói, toàn bộ cuộc thảo luận này đưa ra một điều mà tôi sẽ nổi giận/viết blog trong tương lai gần nếu ai đó không làm điều đó trước tôi, nhưng phần lớn là về sự khác biệt triết học của phong cách phát triển oldschool và newschool
Cách đây rất lâu, chúng ta không có internet siêu nhanh để tra cứu mọi thứ và các nhà phát triển phải thực sự biết mọi thứ một cách siêu hiệu quả hoặc có thể tham khảo mọi thứ trong sách vật lý
Nếu có một điều tôi học được sau khi rời trường công, thì đó là cách sử dụng mục lục của cuốn sách và tìm câu trả lời cho các câu hỏi hoặc giải pháp cho các vấn đề.
Điều này khác với việc bạn tự thiết kế tiện ích của
def circularArrayRotation[a, k, queries]:
from collections import deque
items = deque[a]
items.rotate[k]
ret_list = []
for q in queries:
print[items[q]]
6 và def circularArrayRotation[a, k, queries]:
from collections import deque
items = deque[a]
items.rotate[k]
ret_list = []
for q in queries:
print[items[q]]
8. Nhưng, HackerRank không yêu cầu tôi thiết kế nó từ đầu. Họ chỉ yêu cầu bạn giải quyết vấn đềCó gian lận để có thể tra cứu mọi thứ không?
tôi nghĩ. khi bạn có khả năng tự xây dựng các công cụ, bạn được bật đèn xanh để sử dụng các công cụ được tạo sẵn. Thường thì vấn đề đối với tôi là "sử dụng công cụ nào?", nhưng cho đến nay, Python đã làm được điều đó
Xem vấn đề ban đầu trên HackerRank
Các giải pháp
Bạn thực sự có thể xoay mảng
trong Javascript [của Alessia Bragagnolo]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function circularArrayRotation[a, k, queries] {
let result = [];
while [k > 0] {
let tmp = a.pop[];
a.unshift[tmp];
k--;
}
for [let i = 0; i > N >> K >> Q;
K %= N;
vector arr[N];
copy_n[istream_iterator[cin], N, begin[arr]];
const auto diff = N-K;
while [Q--]
{
cin >> idx;
cout