Bạn sẽ "viết 1 hàm tìm số có giá trị lớn thứ 2 trong dãy số cho trước" như thế nào?

https://ideone.com/JAc9lC :smile_cat:

3 Likes

hì hì, sửa rùi, em nhầm :grin:

2 Likes

Thật ra giải pháp của @frostphantom tốt hơn của anh Đạt với @Gio nè, vừa “xài đúng công cụ cho đúng vấn đề”, vừa đảm bảo về mặt độ phức tạp thuật toán, tuy nhiên điểm yếu tiêu tốn thêm bộ nhớ.

6 Likes

À không, anh sẵn đang code C nên làm một cái bằng C ấy mà. :slight_smile:
Dùng cái nào cũng được cả.

Code ví dụ của anh không chuẩn, vẫn có lỗi, không kiểm tra input etc… nhưng cái anh muốn nói tới là đừng có tập trung quá nhiều vào performance khi ta không có yêu cầu cụ thể về performance.

Cái quan trọng là logic đọc dễ hiểu. Vấn đề này software developer cãi nhau nhiều lắm. Anh theo chủ nghĩa dễ đọc dễ hiểu code ^^

7 Likes

2 sec :grin:

a = [1,2,3,9,2,3,4,6,5,7,8,5,6]
a.sort()
print a
print a[-2]
2 Likes

a = [1,2,3,9,2,3,4,6,5,7,8,5,6]

sửa thành

a = [1,2,3,9,9,2,3,4,6,5,7,8,5,6]

4 Likes

:sweat_smile:

3 Likes

Ờ nhể :V lại vội vàng của Xuân Diệu, vậy thì phải như vầy

a = [1,2,3,9,2,3,4,6,5,7,8,5,6]

a.sort()
a.remove(max(a))
print a[-1]
3 Likes

Vội vàng ver. 2 rồi https://ideone.com/Y5dCh2
Bài này lúc đầu mình cũng làm sai, đọc comment mới nhận ra :sweat_smile:. Bài càng dễ càng dễ sai thì phải.

3 Likes

Last try :joy: @Itachi_Citus còn trường hợp nào không a :joy:

a = [1,2,3,9,9,2,3,4,6,5,7,8,5,6]
 
b = list(set(a))
b.sort()
b[-2]
1 Like

Còn :joy:

3 Likes
my_list = [1, 2, 3, 9, 9, 2, 3, 4, 6, 5, 7, 8, 5, 6]

try:
    my_list = [x for x in my_list if x != max(my_list)]
except ValueError:
    print('The list is empty...')

if not my_list:
    print('Don\'t trick me like that!')
else:
    print(max(my_list))

viết theo mấy cái testcase của @Itachi_Citus thôi chứ không biết còn cái nào khác không :v

3 Likes

Đua đòi code python

find_max2 = lambda a: max(filter(max(a).__ne__,a))
5 Likes

cách đầu là sort lại. Xuất ra array[2]. Cách thứ 2 là tìm max như bình thường, khi tìm được max mới thì lưu max cũ vào nếu không có max mới thì lấy thằng bé hơn thằng max nhất. mà bài dễ dư này không làm được mà được lương 8 triệu chắc bác ấy làm về web. hồi lớp 10 lão thầy cho bài tìm đường đi ngắn nhì trong đồ thị, thằng nào làm được lão cho 10 ngàn. Ngồi nghĩ nát óc méo ra.

2 Likes

https://ideone.com/cEs2ej :sweat_smile:
Edit: À nhầm, phải xài python 3 :stuck_out_tongue: https://ideone.com/xsUwrL

2 Likes

Em code 5 phút đây nhé các bác. O(N) luôn. không kể nhập xuất. :3

#include <bits/stdc++.h>
#define maxn 99999
using namespace std;

int a[maxn], n;
int main()
{
    ios_base::sync_with_stdio(0);
    cin >> n;
    for (int i = 1; i <= n; i++)
        cin >> a[i];
    int maxx1 = a[1];
    int maxx2 = -1e9+7;
    for (int i = 2; i <= n; i++)
        if (a[i] > maxx1)
    {
        swap (maxx1, maxx2);
        maxx1 = a[i];
    } else
        if(a[i] != maxx1)
    {
        maxx2 = max (a[i], maxx2);
    }
    cout << maxx2 << endl;
    return 0;
}

1 Like

This post was flagged by the community and is temporarily hidden.

1 Like

This post was flagged by the community and is temporarily hidden.

1 Like

Hai cái này là bình luận về phần thuật toán, thiên về lý thuyết :slight_smile:. Đương nhiên đề không yêu cầu :sweat_smile:.

Phải định nghĩa exception (hoặc chí ít là thêm msg cụ thể cho Exception). Người dùng không sai :sweat_smile:. Cái này đang bình luận về phần kỹ thuật lập trình.

This post was flagged by the community and is temporarily hidden.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?