Giải bài trên CodeFights
sortByHeight codefights python đã xong, Cám ơn bạn lala
Code của mình:
[details=sortByHeight]
def sortByHeight(a):
position = []
for i in range(0, len(a)):
if a[i] == -1:
position.append(str(i))
num = a.count(-1)
for i in range(0, num):
a.remove(-1)
a.sort()
for i in position:
a.insert(int(i), -1)
return a[/details]
Mình gặp lỗi khi giải hidden test ở bài này areSimilar: https://codefights.com/arcade/intro/level-4/xYXfzQmnhBvEKJwXP
Two arrays are called similar if one can be obtained from another by swapping at most one pair of elements in one of the arrays.
Given two arrays a and b, check whether they are similar.
Example
For a = [1, 2, 3] and b = [1, 2, 3], the output should be
areSimilar(a, b) = true.
The arrays are equal, no need to swap any elements.
For a = [1, 2, 3] and b = [2, 1, 3], the output should be
areSimilar(a, b) = true.
We can obtain b from a by swapping 2 and 1 in b.
For a = [1, 2, 2] and b = [2, 1, 1], the output should be
areSimilar(a, b) = false.
Any swap of any two elements either in a or in b won’t make a and b equal.
Input/Output
[time limit] 4000ms (py)
[input] array.integer a
Array of integers.
Guaranteed constraints:
3 ≤ a.length ≤ 105,
1 ≤ a[i] ≤ 1000.
[input] array.integer b
Array of integers of the same length as a.
Guaranteed constraints:
b.length = a.length,
1 ≤ b[i] ≤ 1000.
[output] boolean
true if a and b are similar, false otherwise.
Code của mình: (giải được 14/20 test)
def areSimilar(a,b): for i in range(len(a)): for j in range(i,len(a)): equal = True tmp = a[i] a[i] = a[j] a[j] = tmp for k in range(len(a)): if a[k] != b[k]: equal = False break if equal: return True a[j] = a[i] a[i] = tmp return False
Xin mọi người giúp đỡ và đưa ra giải thuật tốt hơn
insert, remove
là O(n), nên độ phức tạp của bài của bạn cỡ O(n2) có chạy dc không?Mình thay đổi một chút code của bạn nhé
Mình dùng
.append
, không cần thiết phải dùngstr() -> int()
chưa kể nó còn gây ra lỗi như ở bài trên. Nếu muốn dùng thì bạn chỉ cần sửaposition += str(i)
thànhposition.append(str(i))
Mình ví dụ:
Nếu vị trí chữ số
-1
< 10 thì không sao vì chỉ có 1 chữ số, nếu >= 10 thì ví dụ có-1
ở vị trí 11 thìposition = ['1', '1']
. Vậy nếu dùngfor i in position:
thìi
sẽ nhận giá trị1
hai lần chứ không phải là số11
. Bạn cứ thử với dùng code này cuối function của bạn để xem rõ hơn.cho code C# của mình hồi đó nè
Cám ơn bạn, giờ mình với biết nó tách str(i) ra, mình nghĩ nó thêm vào luôn cơ.
Mình làm được rồi
Input/Output
[time limit] 4000ms (py)
[input] array.integer a
If a[i] = -1, then the ith position is occupied by a tree. Otherwise a[i] is the height of a person standing in the ith position.
Guaranteed constraints:
5 ≤ a.length ≤ 15,
-1 ≤ a[i] ≤ 200.
[output] array.integer
Sorted array a with all the trees untouched.
Cám ơn bạn mặc dù mình chẳng hiểu gì
À, thuật toán lúc đó mình đưa ra như thế này:
-1
ra trong mảnga
và cho nó vào listOutput
Output
đóa
, ở vị trí nào có-1
thì thêm-1
vào vị trí tương ứng ở OutputOutput
dưới dạng mảng.Giúp mình bài tiếp theo với
Cho code C# nè
Cho mình xin thuật toán với
Bạn tham khảo trên github xem. Tự đọc tự ngẫm
GitHub
socathie/CodeFights
Codes for CodeFights (python)
Đề bài bảo là 2 mảng giống nhau hoặc đổi chỗ 1 cặp số mà giống nhau thì trả về true.
Cho một mảng, đổi chỗ 2 số khác nhau trong mảng đó thì sẽ ra mảng mới khác biệt với mảng ban đầu ở 2 (và chỉ 2) vị trí đó.
=> Ta có thuật toán:Đếm số điểm khác biệt giữa 2 mảng. Dùng 2 biến
First
vàSecond
để lưu lại 2 vị trí đầu tiên mà 2 mảng khác nhau.A[First]
khácB[Second]
hoặcA[Second]
khácB[First]
thì trả về false (vì nếu swap thì 2 mảng vẫn khác nhau)