Skip to content

Commit 3b82035

Browse files
committed
new
1 parent ac9a560 commit 3b82035

File tree

4 files changed

+66
-16
lines changed

4 files changed

+66
-16
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
public class MaxSubarray {
2+
3+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
// Đề bài: Tính tổng của mảng số nguyên
2+
// Đầu vào: n, mảng số nguyên arr[] chứa n phần tử.
3+
// Đầu ra: Tổng của mảng arr[].
4+
5+
/* Nhận xét:
6+
* - Nếu sử dụng scanner để đọc dữ liệu input sẽ rất chậm và bị TLE.
7+
* -> Sử dụng BufferedReader để đọc dữ liệu input.
8+
* - BufferedReader là một class trong Java để đọc dữ liệu từ input stream (như file, console, socket).
9+
* - Đọc dữ liệu từ input stream nhanh hơn so với Scanner.
10+
* - Đọc dữ liệu từ input stream theo dòng (line) bằng phương thức readLine().
11+
* - Để đọc dữ liệu từ input stream, cần tạo một đối tượng InputStreamReader để đọc dữ liệu từ input stream.
12+
* - Để tạo một đối tượng BufferedReader, cần truyền một đối tượng InputStreamReader vào constructor của BufferedReader.
13+
*/
14+
15+
import java.io.BufferedReader;
16+
import java.io.IOException;
17+
import java.io.InputStreamReader;
18+
19+
public class SumOfArray {
20+
// throws IOException có tác dụng bắt lỗi nếu có ngoại lệ xảy ra
21+
public static void main(String[] args) throws IOException {
22+
// Sử dụng BufferedReader để đọc dữ liệu từ bàn phím nhanh hơn
23+
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
24+
25+
// Sử dụng phương thức parseInt để chuyển chuỗi thành số nguyên
26+
int n = Integer.parseInt(reader.readLine());
27+
28+
long sum = 0;
29+
// Sử dụng phương thức split để tách chuỗi thành mảng
30+
String[] arr = reader.readLine().split(" ");
31+
32+
for (int i = 0; i < n; i++) {
33+
sum += Long.parseLong(arr[i]);
34+
}
35+
36+
System.out.println(sum);
37+
}
38+
}

5. Data Structures and Algorithms/SumTwoInts.java

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -30,45 +30,49 @@ public class SumTwoInts {
3030
public static void main(String[] args) {
3131
Scanner scanner = new Scanner(System.in);
3232

33-
System.out.println("Enter the first number: ");
33+
System.out.println("--Using BigInteger class");
3434
BigInteger num1 = scanner.nextBigInteger();
35-
36-
System.out.println("Enter the second number: ");
3735
BigInteger num2 = scanner.nextBigInteger();
3836

3937
// Cộng hai số nguyên lớn
4038
BigInteger sum = num1.add(num2);
4139

42-
System.out.println("Sum of two numbers: " + sum);
40+
System.out.println("Sum: " + sum);
41+
42+
System.out.println("--Using SumByString");
43+
String num1Str = scanner.next();
44+
String num2Str = scanner.next();
45+
46+
SumByString sumByString = new SumByString(num1Str, num2Str);
47+
System.out.println("Sum: " + sumByString.add());
4348

4449
scanner.close();
4550
}
4651
}
4752

48-
// Ngoài ra, có 1 số cách khác để cộng 2 số nguyên lớn:
49-
50-
// Cách 1: Sử dụng phép cộng thông thường trên chuỗi số nguyên.
53+
// Sử dụng phép cộng thông thường số nguyên (nhập vào duới dạng chuỗi kí tự).
5154
/*
52-
* - Đọc 2 số nguyên a, b vào 2 chuỗi số.
55+
* - Đọc 2 số nguyên a, b vào 2 chuỗi kí tự.
5356
* - Thực hiện phép cộng từ hàng đơn vị đến hàng cao nhất.
5457
*/
5558
class SumByString {
5659
private String num1;
5760
private String num2;
5861

59-
public SumByString(long a, long b) {
60-
this.num1 = String.valueOf(a);
61-
this.num2 = String.valueOf(b);
62+
public SumByString(String num1, String num2) {
63+
this.num1 = num1;
64+
this.num2 = num2;
6265
}
6366

6467
public String add() {
6568
StringBuilder result = new StringBuilder();
66-
int carry = 0;
67-
int i = num1.length() - 1;
69+
int carry = 0; // Số nhớ
70+
int i = num1.length() - 1; // Vị trí hàng đơn vị của số thứ nhất, là (length - 1) vì index bắt đầu từ 0
6871
int j = num2.length() - 1;
6972

7073
while (i >= 0 || j >= 0) {
7174
int sum = carry;
75+
// Cộng từ hàng đơn vị đến hàng cao nhất
7276
if (i >= 0) {
7377
sum += num1.charAt(i--) - '0';
7478
}

README.md

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -166,11 +166,16 @@ Trong khi sử dụng kho lưu trữ này cho việc học tập, bạn nên tu
166166

167167
<summary>Phần 5: Cấu trúc dữ liệu và Thuật toán bằng Java</summary>
168168

169+
> Mục này gần như cùng thứ tự với kho lưu trữ [**Cấu trúc dữ liệu và thuật toán sử dụng C/C++**](https://github.com/HaiAu2501/Data-Structures-and-Algorithms-using-C), chỉ khác là được viết bằng ngôn ngữ Java. Sẽ có một số khác biệt giữa hai ngôn ngữ, bạn đọc có thể tự đối chiếu chúng.
170+
169171
- **Tuần 1: Làm quen với Java**
170172
- [SumTwoInts](5.%20Data%20Structures%20and%20Algorithms/SumTwoInts.java)
171-
- [SumArray]
172-
- [MaxSubarray]
173-
- **Tuần 2: Thuật toán đệ quy**
173+
- [SumOfArray](5.%20Data%20Structures%20and%20Algorithms/SumOfArray.java)
174+
- [MaxSubarray](5.%20Data%20Structures%20and%20Algorithms/MaxSubarray.java)
175+
- **Tuần 2: Thuật toán Đệ quy & Thuật toán Quay lui**
176+
- **Tuần 3: Thuật toán Nhánh cận & Thuật toán Tham lam**
177+
- **Tuần 4: Thuật toán Quy hoạch động**
178+
- **Tuần 5: Ngăn xếp & Hàng đợi**
174179

175180
</details>
176181

0 commit comments

Comments
 (0)