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:
- 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.
What to read next
Want more posts about ARTS?
Posts in the same category are usually the best next step for reading more on this topic.
View same categoryWant to keep following #iOS?
Tags are useful for related tools, specific problems, and similar troubleshooting notes.
View same tagWant to explore another direction?
If you are not sure what to read next, return to the homepage and start from categories, topics, or latest updates.
Back home