ปัญหา
สมมติว่าเรามีอาร์เรย์ของจำนวนเต็ม เราต้องหาความยาวของเซิร์บอาร์เรย์เพิ่มขึ้นติดกันที่ยาวที่สุด
เช่น ถ้าผนวกเข้าเป็น [2,4,6,5,8] ผลลัพธ์จะเป็น 3 เนื่องจากเซิร์บซีเควลเพิ่มขึ้นติดกันที่ยาวที่สุดคือ [2,4,6] และความยาวคือ 3
วิธีแก้ปัญหา
- ถ้าขนาดของ nums <= 1: คืนค่าขนาดของ nums
- answer := 1, count := 1
- for i := 0 ถึง ขนาดของ nums - 2 ทำ:
- ถ้า nums[i] < nums[i+1]: เพิ่ม count ขึ้น 1; answer := max ของ answer และ count
- มิฉะนั้น: count := 1
- คืนค่า answer
ตัวอย่างโค้ด C++
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int findLengthOfLCIS(vector<int>& nums) {
if (nums.size() <= 1)
return nums.size();
int answer = 1, count = 1;
for (int i = 0; i < nums.size() - 1; i++) {
if (nums[i] < nums[i + 1]) {
count++;
answer = max(answer, count);
}
else {
count = 1;
}
}
return answer;
}
};
int main(){
Solution ob;
vector<int> v = {2,4,6,5,8};
cout << (ob.findLengthOfLCIS(v));
}
อินพุต
{2,4,6,5,8}
เอาต์พุต
3