thảo luận [Học Tập] Topic thuật toán

  • Người tạo chủ đề Người tạo chủ đề unknowpc90
  • Ngày bắt đầu Ngày bắt đầu
Cho một dãy số không được sắp theo thứ tự. Hãy trả về một dãy số gồm những phần tử là bình phương của các số từ dãy số ban đầu, được sắp theo thứ tự tăng dần, độ phức tạp thuật toán là O(n)
VD:

Example 1:

Input:
nums = [-4,-1,0,3,10]
Output: [0,1,9,16,100]
Explanation: After squaring, the array becomes [16,1,0,9,100].
After sorting, it becomes [0,1,9,16,100].

Example 2:

Input:
nums = [-7,-3,2,3,11]
Output: [4,9,9,49,121]
Các bác cho tôi hỏi đoạn code này sai chỗ nào nhỉ?
C++:
  vector<int> sortedSquares(vector<int>& nums) {
        vector<int> result;
        while(nums.empty() == false){
            int min = *min_element(nums.begin(), nums.end()); //Tìm phần tử nhỏ nhất
            min = min * min; // Bình phương
            result.push_back(min);
            auto iterator = find(nums.begin(), nums.end(), min);
            nums.erase(iterator); // Xóa phần tử nhỏ nhất
    }
        return result;
    }
 
Sửa lần cuối:
Cho một dãy số không được sắp theo thứ tự. Hãy trả về một dãy số gồm những phần tử là bình phương của các số từ dãy số ban đầu, được sắp theo thứ tự tăng dần, độ phức tạp thuật toán là O(n)
VD:


Các bác cho tôi hỏi đoạn code này sai chỗ nào nhỉ?
C++:
  vector<int> sortedSquares(vector<int>& nums) {
        vector<int> result;
        while(nums.empty() == false){
            int min = *min_element(nums.begin(), nums.end()); //Tìm phần tử nhỏ nhất
            min = min * min; // Bình phương
            result.push_back(min);
            auto iterator = find(nums.begin(), nums.end(), min);
            nums.erase(it); // Xóa phần tử nhỏ nhất
    }
        return result;
    }
input là dãy có cả số âm và dương mà. Nên lấy ra min rồi bình phương thì đâu chắc chắn nó là nhỏ nhất nữa? btw, cách của thím hiện tại không thỏa mãn được yêu cầu O(n) nha. Sort mà O(n) thì chắc dùng counting sort. :D
 
input là dãy có cả số âm và dương mà. Nên lấy ra min rồi bình phương thì đâu chắc chắn nó là nhỏ nhất nữa? btw, cách của thím hiện tại không thỏa mãn được yêu cầu O(n) nha. Sort mà O(n) thì chắc dùng counting sort. :D
:doubt: Bảo sao...
Nhân tiện, bác cho tôi hỏi độ phức tạp thuật toán của cái này là bao nhiêu:
C++:
 vector<int> sortedSquares(vector<int>& nums) {
        vector<int> result;
       for( size_t i = 0; i < nums.size(); i++){
           int square = nums[i] * nums[i];
           result.push_back(square);
       }
        sort(result.begin(), result.end());
        return result;
    }
 
Cho một dãy số không được sắp theo thứ tự. Hãy trả về một dãy số gồm những phần tử là bình phương của các số từ dãy số ban đầu, được sắp theo thứ tự tăng dần, độ phức tạp thuật toán là O(n)
VD:


Các bác cho tôi hỏi đoạn code này sai chỗ nào nhỉ?
C++:
  vector<int> sortedSquares(vector<int>& nums) {
        vector<int> result;
        while(nums.empty() == false){
            int min = *min_element(nums.begin(), nums.end()); //Tìm phần tử nhỏ nhất
            min = min * min; // Bình phương
            result.push_back(min);
            auto iterator = find(nums.begin(), nums.end(), min);
            nums.erase(it); // Xóa phần tử nhỏ nhất
    }
        return result;
    }
Bài này tìm vị trí giữa số âm với số dương rồi dùng 2 con trỏ có phải O(n) ko nhỉ
 
Có ai tham gia cái này k? đang bị kẹt ở 2 bài cuối. Ai làm rồi cho ý tưởng với. :D
Giải được bài C chapter 1 rồi, chapter 2 đúng khó hẳn. Có ý tưởng dùng QHĐ có thể giải được nhưng chắc k kịp nữa nên thôi.
Cơ mà cái này mình submit solution lên v thôi chứ k biết đúng sai à. Phải đợi end mới biết, chua dữ v.
 
:doubt: Bảo sao...
Nhân tiện, bác cho tôi hỏi độ phức tạp thuật toán của cái này là bao nhiêu:
C++:
 vector<int> sortedSquares(vector<int>& nums) {
        vector<int> result;
       for( size_t i = 0; i < nums.size(); i++){
           int square = nums[i] * nums[i];
           result.push_back(square);
       }
        sort(result.begin(), result.end());
        return result;
    }
Dpt là O(nlogn) do cái sort
 
Giải được bài C chapter 1 rồi, chapter 2 đúng khó hẳn. Có ý tưởng dùng QHĐ có thể giải được nhưng chắc k kịp nữa nên thôi.
Cơ mà cái này mình submit solution lên v thôi chứ k biết đúng sai à. Phải đợi end mới biết, chua dữ v.
20k$ mà thím, phải chua chứ. T cũng làm đc 3 bài đầu thôi. Chưa biết đúng sai ntn. :D
 
Giải được bài C chapter 1 rồi, chapter 2 đúng khó hẳn. Có ý tưởng dùng QHĐ có thể giải được nhưng chắc k kịp nữa nên thôi.
Cơ mà cái này mình submit solution lên v thôi chứ k biết đúng sai à. Phải đợi end mới biết, chua dữ v.
Câu 2 đó dễ thôi mà có j đâu phải quy hoạch động fen. Cái input của nó nhỏ bằng cái lỗ mũi code đại cũng chạy đc mà, mới vòng giữ xe thôi.
 
https://www.spoj.com/PTIT/problems/CPPREA12/
bác nào xem thử hộ em bài này với, nó chính là bài maximum product subarray trên leetcode ấy, bài này cổ điển e code trên leetcode tẹo là xong. Không hiểu về đây mắc gì mà sub mấy chục lần vẫn chưa qua :canny:
C++:
#include<bits/stdc++.h>
using namespace std;
int main(){
    int t;
    cin>>t;
    while(t--){
        int n;
        cin>>n;
        long long a[n];
        for(long long &x:a) cin>>x;
       long long maedh = a[0];
        long long  miedh= a[0];
        long long res = a[0];
        for(int i=1;i<n;i++){
            if(a[i]<0){
                swap(maedh, miedh);
            }
            maedh = max(a[i], a[i]*maedh);
            miedh = min(a[i], a[i]*miedh);
            res = max(maedh, res);
        }
        cout<<res<<endl;
    }
}
 
Nhân tiện cho hỏi thím dùng gì để dev C++ vậy ? Mình dùng windows, đang code chay rồi chạy bằng command line thấy bất tiện quá.
T code trên ubuntu, dùng vscode + gcc. mấy cái toolkit này quen cái nào thì xài cái đó thôi.
Câu 2 đó dễ thôi mà có j đâu phải quy hoạch động fen. Cái input của nó nhỏ bằng cái lỗ mũi code đại cũng chạy đc mà, mới vòng giữ xe thôi.
Bài này t cũng dùng QHD. Thím quăng hết code lên đây cho ae tham khảo đc k? :D
 
T code trên ubuntu, dùng vscode + gcc. mấy cái toolkit này quen cái nào thì xài cái đó thôi.

Bài này t cũng dùng QHD. Thím quăng hết code lên đây cho ae tham khảo đc k? :D

Brute force thôi anh, duyệt hết dòng và cột dòng(cột) nào chỉ có X với . Thì đếm số dấu chấm. Vứt kết quả vào cái một cái dictionary. Có kết quả đó rồi thì ++. Xử lý chút để loại bỏ trường hợp trùng. Tôi làm vậy thôi.

Sent from Xiaomi M2102J20SG using vozFApp
 
Brute force thôi anh, duyệt hết dòng và cột dòng(cột) nào chỉ có X với . Thì đếm số dấu chấm. Vứt kết quả vào cái một cái dictionary. Có kết quả đó rồi thì ++. Xử lý chút để loại bỏ trường hợp trùng. Tôi làm vậy thôi.

Sent from Xiaomi M2102J20SG using vozFApp
này là câu 3 mà, :D . có kq rồi đó ae. t bị sai bài 2. :beat_brick:
 
Brute force thôi anh, duyệt hết dòng và cột dòng(cột) nào chỉ có X với . Thì đếm số dấu chấm. Vứt kết quả vào cái một cái dictionary. Có kết quả đó rồi thì ++. Xử lý chút để loại bỏ trường hợp trùng. Tôi làm vậy thôi.

Sent from Xiaomi M2102J20SG using vozFApp
Đang nói bài C chapter 2 bác ơi :D. Bài đào vàng ấy. Hồi tối ng ta công bố đáp án r mà đọc vẫn chưa hiểu mấy. Sáng nay mới đọc lại. :p:p
 

Thống kê chủ đề

Ngày tạo
unknowpc90,
Người trả lời cuối
Spaghetti Code,
Trả lời
1.460
Lượt xem
154.138
Quay lại
Lên đầu trang