Back home

SENI #026

SENI #026

SENI 026

Ini adalah pasal 26

Pertanyaan algoritma algoritma

646. Rantai pasangan terpanjang

Kesulitan: Sedang

Berikan pasangan nomor n. Pada setiap pasangan bilangan, bilangan pertama selalu lebih kecil dari bilangan kedua.

Sekarang, kami mendefinisikan hubungan berikut. Jika dan hanya jika b < c, maka pasangan nomor (c, d) dapat mengikuti (a, b). Kami menggunakan formulir ini untuk membangun rantai pasangan angka.

Diketahui suatu himpunan pasangan, tentukan panjang rantai pasangan terpanjang yang dapat dibentuk. Anda tidak perlu menggunakan semua pasangan, Anda dapat memilih beberapa di antaranya dalam urutan apa pun untuk dibuat.

Contoh:

输入: [[1,2], [2,3], [3,4]]
输出: 2
解释: 最长的数对链是 [1,2] -> [3,4]

Catatan:

  1. Banyaknya pasangan bilangan yang diberikan berada pada kisaran [1, 1000].

Solusi

Bahasa: C

#define maxn 1005
struct Pair{
    int begin;
    int end;
} pair[maxn];

int cmp(const void* a, const void* b){
    struct Pair* x = (struct Pair*)a;
    struct Pair* y = (struct Pair*)b;
    if(x->end == y->end) return x->begin - y->begin;
    return x->end - y->end;
}

void matrixToStruct(int** pairs, int row){
    for(int i = 0;i < row;i++){
        pair[i].begin = pairs[i][0];
        pair[i].end = pairs[i][1];
    }
}

int findLongestChain(int** pairs, int pairsRowSize, int pairsColSize) {
    int row = pairsRowSize;
    int col = pairsColSize;
    
    matrixToStruct(pairs, row);
    qsort(pair, row, sizeof(struct Pair), cmp);
    
    int cnt = 1;
    for(int i = 1, k= 0;i < row;i++){
        if(pair[i].begin > pair[k].end){
            cnt++;
            k = i;
        }
    }
    return cnt;
}

198. Perampokan

Kesulitan: Mudah

Anda adalah seorang pencuri profesional yang berencana mencuri rumah di sepanjang jalan. Ada sejumlah uang tunai yang disembunyikan di setiap kamar. Satu-satunya faktor pembatas yang mempengaruhi pencurian Anda adalah bahwa rumah-rumah yang berdekatan dilengkapi dengan sistem anti-pencurian yang saling berhubungan. Jika dua rumah bersebelahan dibobol pencuri pada malam yang sama, sistem akan otomatis alarm.

Diberikan serangkaian bilangan bulat non-negatif yang mewakili jumlah uang yang disimpan di setiap rumah, hitung jumlah maksimum uang yang dapat Anda curi tanpa memicu perangkat alarm.

Contoh 1:

输入: [1,2,3,1]
输出: 4
解释: 偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。
     偷窃到的最高金额 = 1 + 3 = 4 。```

**Contoh 2:**

输入: [2,7,9,3,1] 输出: 12 解释: 偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。   偷窃到的最高金额 = 2 + 9 + 1 = 12 。



#### Solusi

Bahasa: **C**


//方法一 递归法 int rob(int* nums, int numsSize) { if (numsSize <=0) { return 0; }

if (numsSize==1) {
    return nums[0];
}
int r1= rob(nums,numsSize-2) +  nums[numsSize - 1];
int r2= rob(nums,numsSize-1) ;
if (r1 > r2) {
    return r1;
}
return r2;

}



//方法二 备忘录递归法 int re[10000] = {-1};

int rob1(int* nums, int numsSize) {

if (numsSize <=0) {
    return 0;
}

if (numsSize==1) {
    return nums[0];
}

if (re[numsSize] >-1) {
    return re[numsSize];
}

int r1= rob1(nums,numsSize-2) +  nums[numsSize - 1];
int r2= rob1(nums,numsSize-1) ;
if (r1 > r2) {
    re[numsSize] = r1;
    return r1;
}

re[numsSize] = r2;
return r2;

}

int rob(int* nums, int numsSize){ for (int i=0; i<10000; i++) { re[i] = -1; } return rob1(nums, numsSize); }




```c
//方法三 动态规划
int rob(int* nums, int numsSize){
    if (numsSize <=0) {
        return 0;
    }

    if (numsSize==1) {
        return nums[0];
    }
    
    int r0 = nums[0];
    int r1 = nums[1];
    int sum = r0 > r1 ? r0 : r1;
   
    
    for (int i = 2; i < numsSize; i++) {
        r1 = r0 + nums[i];
        r0 = sum;
        sum = r0 > r1 ? r0 : r1;
    }
    
    
    return sum;
}

Ulasan

Artikel di sini membahas tentang proses pencarian kerja seorang Amerika, dan akhirnya mendapat gaji tahunan sebesar 300.000 dolar AS. Tingkat gaji kaisar Amerika memang tinggi. https://dandan2009.github.io/2019/03/01/how-I-negotiated-a-job-offer-in-silicon-valley/

Kiat

Setelah proyek kita benar-benar berkembang, seiring dengan berjalannya bisnis, akan ada banyak kelas yang tidak berguna, yaitu kelas yang tidak direferensikan oleh kelas mana pun. Kelas-kelas ini akan menyebabkan paket instalasi menjadi lebih besar, sehingga perlu dibersihkan. Ada skrip https://github.com/dblock/fui,很实用, di github Ini juga sangat mudah digunakan: Instalasi: permata instal fui

Ambil kelas yang tidak digunakan di direktori saat ini:

fui find

Ada juga penghapusan langsung dan fungsi lainnya, Anda dapat memeriksanya untuk detailnya.

Perhatikan saat menggunakannya. Kelas yang tidak direferensikan oleh kelas lain mungkin juga berguna. Misalnya, jika metode load diterapkan, semua orang tahu bahwa metode load adalah metode yang dipanggil secara otomatis ketika APP dimulai. Jika ada logika bisnis yang tertulis di dalamnya, jika dihapus akan menimbulkan masalah. Saya telah mengabaikan kesalahan seperti itu. Oleh karena itu, yang terbaik adalah memahami logika bisnis saat menghapus kelas.

Bagikan

Cara mencegat kerusakan pada aplikasi iOS, mencegah kerusakan, dan mengurangi tingkat kerusakan. Idenya saat ini adalah untuk mengenal lapisan terbawah dari sistem iOS, yaitu sistem operasi. Menjadi akrab dengan sistem operasi memerlukan studi mendalam tentang bahasa C dan C++ untuk meningkatkan pola Anda sendiri. Pertanyaan ini pada dasarnya kembali untuk membiasakan diri Anda dengan dasar-dasarnya. Hanya jika Anda memahami prinsip-prinsip dasarnya, Anda dapat menemukan solusi mendasar terhadap masalah yang Anda hadapi.