Một bạn, dường như như vẫn cay cú, đăng câu hỏi này và nói rằng “thằng em” ở dãy trọ không có tác dụng được bài bác này tuy thế lại giảm giá được lương 8tr.Bạn vẫn xem: search số lớn thứ hai trong mảng

https://vozforums.com/showthread.php?t=4971101

Nếu là các bạn, với đề “viết 1 hàm search số có giá trị lớn thứ 2 trong hàng số đến trước” thì các bạn sẽ giải như vậy nào?

Chú ý là đề chỉ bao hàm viết 1 hàm tìm kiếm số có mức giá trị lớn thứ 2 trong dãy số mang lại trước, không tồn tại yêu ước gì khác.

Bạn đang xem: Tìm số lớn thứ 2 trong mảng

Đạt gồm 2 bí quyết giải bài bác này. Một bí quyết lúc còn tới trường và một phương pháp lúc đã từng đi làm. Đạt sẽ chia sẻ sau.

Update, đã share ở đây. Gạch đá nào
*

*

các bạn sẽ "viết 1 hàm tìm kiếm số có giá trị lớn thứ hai trong hàng số đến trước" như thế nào? dev chat từ thời điểm cách đây cũng ổn, nhưng bao gồm cách xuất sắc hơn, cũng không nặng nề mấy. Ví như cách của nguyenchiemminhvu bởi Đã tất cả câu vấn đáp của nguyenchiemminhvu bắt buộc Đạt share thế này. Khi mình đi làm, không tồn tại chuyện số lượng giới hạn sẽ cần làm trong một vòng lặp tuyệt hai vòng lặp. Lưu giữ một điều là hw thì rẻ mà lại developer thì mắc. Nếu như mình mắc thì cần đáng giá của nó. Mình có mức giá thì bạn khác cũng vậy, tức là viết code làm thế nào để bạn sau hiểu hiểu và code theo sớm nhất có thể. Lúc đi học có ta rất có thể viết một hàm … 12 Likes nguyenhuuca (Nguyen Ca) May 12, 2016, 6:25am #2

Cái bài này vấn đáp bên capegini bao gồm nè :D. Và yêu cầu là 1 trong những vòng for.

4 Likes nghia (cescnghia) May 12, 2016, 7:39am #3

1 vòng lập for, mình ko bao gồm xử lý trường hợp mảng chỉ có 1 phần tử.

#include #include int function(int* tab, size_t length);int main(void)int tab = 1, -123, 80, 8, 2, 10, 9, 18, -1000, 200, 1, 4;int result = function(tab, 12);printf("Second max in this array : %d ", result); return 0;int function(int* tab, size_t length){int max1 = INT_MIN;int max2 = INT_MIN;int i;for(i = 0; i tab && max2 4 Likes nguyenchiemminhvu (...) May 12, 2016, 7:41am #4 Nếu tất cả các bộ phận bằng nhau cùng bằng luôn luôn INT_MIN thì sao

3 Likes ltd (Lê nai lưng Đạt) May 12, 2016, 7:43am #5

Đề ko yêu cầu dùng 1 vòng lặp. Đạt đưa ra câu hỏi để xử lý vấn đề thực tế ta gặp

viết 1 hàm kiếm tìm số có giá trị lớn thứ 2 trong hàng số mang đến trước

Chứ không chuyển ra bất cứ một số lượng giới hạn nào.

3 Likes Itachi_Citus (Itachi Citus) May 12, 2016, 7:42am #6

Lúc đầu tôi cũng nghĩ bài này như thể bạn, gọi lại trên voz bắt đầu thấy còn những lỗ hổng

*

:

Trường hòa hợp length ngôi trường hợp toàn bộ mảng cân nhau không được xử lý.Thuật toán không tổng thể cho trường đúng theo mảng chưa phải số nguyên (INT_MIN).Thuật toán không tổng thể cho trường thích hợp tìm số to thứ n.…

Nhìn vậy mà phức tạp hơn tưởng tượng lúc đầu

*

3 Likes ktd (Kiều Dũng) May 12, 2016, 7:49am #7

Hi. Mình không xy ly truong hop sở hữu co 1 phan tu nhe.

#include #include int main(){ //int arr_a = 19, 0, 5, 7, 13, 15, 11, 6, 4, 5, 102, 11, 15, 15, 16, 18, 19; int arr_a = 0,0,0,0,0,0,0; int max = arr_a; int max2 = 0; int i; //printf("%d", length_array); for (i = 0; i max) max = arr_a; max2 = arr_a; else if (max2 2 Likes nghia (cescnghia) May 12, 2016, 7:50am #8 Ok, chấp nhận với bạn. Nên phải giải quyết và xử lý tất cả các exception !

1 lượt thích tdl May 12, 2016, 7:52am #9

Nếu hàng cần sử dụng 1 lần thì

*

for (i = 0; i Smax_denhat)Smax_denhi = Smax_denhat;Smax_denhat = a;if (Smax_denhi == Smax_denhat)printf("Mang nay teo van de ma tui hong biet van de gi.");Bookmark topic lại để dành

2 Likes nguyenchiemminhvu (...) May 12, 2016, 8:06am #10

Đề không yêu cầu dùng vòng lặp gì thì em sử dụng vòng lặp while vậy

Sắp xếp mảng giảm dần, hoàn thành rồi tìm phần tử khác bộ phận thứ nhất đầu tiên thứ nhất.Phải vậy không anh ltd

#include #include #include #include #include using namespace std;void find_max2(vector &v) v.size() == 1)cout b; );int i = 0, after_i = i + 1;while (i vec;int n;cout > n;for (int i = 0; i 4 Likes postace (Hai) May 12, 2016, 8:11am #11 Đề bài không giới hạn gì, đề nghị em sẽ sử dụng cách bình thường nhất :

Tìm maxDuyệt mảng, tìm thành phần lớn thứ hai 2 Likes ltd (Lê trằn Đạt) May 12, 2016, 8:27am #12

Cách này cũng ổn, nhưng gồm cách xuất sắc hơn, cũng không cực nhọc mấy. Ví dụ như cách của nguyenchiemminhvu

Vì Đã có câu vấn đáp của nguyenchiemminhvu yêu cầu Đạt share thế này.

Khi bản thân đi làm, không có chuyện giới hạn sẽ bắt buộc làm trong 1 vòng lặp tuyệt hai vòng lặp. Ghi nhớ một điều là hw thì rẻ mà lại developer thì mắc.

Nếu mình mắc thì cần đáng giá chỉ của nó. Mình có giá thì người khác cũng vậy, tức là viết code làm sao để người sau đọc hiểu cùng code theo sớm nhất có thể có thể.

Lúc đến lớp có ta có thể viết một hàm với rất nhiều if else loàn xạ. Giúp cho chương trình chạy nhanh hơn vài ba phần triệu giây. Nhưng tạo nên developer không giống tốn vài ba phút hoặc 1 ngày hoặc vài ngày chỉ để debug. Vậy bao gồm đáng không?

Solution thời gian Đạt tới trường sẽ là 1 vòng lặp với nhiều if else, sau cuối chạy được. Tuy thế rất cạnh tranh hiểu và khó khăn debug.

Solution cơ hội Đạt đi làm việc sẽ là xem thử ngữ điệu có cung ứng hàm sort không, bởi vì dụ như C++ STL hỗ trợ std::sort. Hoặc C cung cấp qsort. Hãy thực hiện nó, những hàm này là những hàm tối ưu giỏi hơn hàm mình tự viết nhiều. Đừng reinvent the wheel.

Xem thêm: Mã Ngành Đại Học Hoa Sen 2020, Mã Ngành, Tổ Hợp Xét Tuyển Đại Học Hoa Sen 2020

Các bước tiến hành như sau:

Sắp sếp giảm dần mảng vẫn chohàm sort của tủ sách sẽ mang đến ra công dụng tối ưu nhất có thể trong lúc ta tốn 1 phút để code chiếc code này.kiểm tra từ là 1 tới n của mảng, ví như thấy số nhỏ dại hơn có thì đó đó là số max trang bị 2

Ưu điểm:

Code nhanh, hàm sort buổi tối ưu, logic đơn giản dễ dàng dễ debug.

Nhược điểm

Có thể lờ lững hơn chương trình if else tá lả vài phần triệu giây

Code C

#include int get_second_max(int * array, int len); int main() int array = 1,2,9,9,9,3,4,5,7,0; printf("get_second_max: %d ", get_second_max(array, 10)); int cmp_int (const void * a, const void * b) return ( *(int*)b - *(int*)a ); int get_second_max(int * array, int size) int max; int second_max; int i; qsort (array, size, sizeof (int), cmp_int); max = second_max = array; for(i = 1; i array ) second_max = array; break; return second_max;Code ++ hoàn toàn có thể xem bài xích của Vũ:


bạn sẽ "viết 1 hàm search số có mức giá trị lớn thứ hai trong hàng số đến trước" như thế nào? dev chat Đề không yêu cầu cần sử dụng vòng lặp gì thì em cần sử dụng vòng lặp while vậy
bố trí mảng giảm dần, ngừng rồi tìm bộ phận khác bộ phận thứ nhất đầu tiên thứ nhất. Yêu cầu vậy ko anh ltd
#include #include #include #include #include using namespace std;void find_max2(vector &v){if (v.empty() || v.size() == 1){cout 7 Likes