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?


(Itachi Citus) #21

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


(Chế Tiệp Chân Khoa) #22

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


(Itachi Citus) #23

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ớ.


(Lê Trần Đạt) #24

À 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 ^^


(Thành Phạm) #25

2 sec :grin:

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

(Lê Trần Đạt) #26

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]


(Itachi Citus) #27

:sweat_smile:


(Thành Phạm) #28

Ờ 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]

(Itachi Citus) #29

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.


(Thành Phạm) #30

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]

(Itachi Citus) #31

Còn :joy:


(anon10499953) #32
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


(Gió) #33

Đua đòi code python

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

(chu đức anh) #34

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.


(Itachi Citus) #35

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


(chu đức anh) #36

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;
}


(Tao Không Ngu.) #37

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


(Tao Không Ngu.) #38

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


(Itachi Citus) #39

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.


(Tao Không Ngu.) #40

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?