Tổng hai phần tử trong mảng javascript

Vòng lặp for được sử dụng để lặp lại một đối tượng có thể lặp lại. Chúng ta có thể sử dụng vòng lặp for để duyệt qua các phần tử của mảng và tính tổng các giá trị của chúng

Ví dụ về mảng JavaScript tính tổng với vòng lặp for

let array = [10, 20, 30, 40, 50];
let sum = 0;

for [let i = 0; i < array.length; i++] {
    sum += array[i];
}

console.log[sum];

// output: 150


Xem thêm

  • Làm cách nào để kiểm tra xem một mảng có chứa giá trị trong JavaScript không?
  • Làm cách nào để cắt một mảng trong JavaScript?
  • Làm cách nào để đảo ngược một mảng trong JavaScript?
  • Làm cách nào để sao chép và sao chép một mảng trong JavaScript?
  • Làm cách nào để nối một mảng thành một chuỗi trong JavaScript?

Javascript Sum Array Các ví dụ và bài viết liên quan đến API

Làm cách nào để gửi yêu cầu POST bằng JavaScript?

Trong bài viết này, chúng ta sẽ tìm hiểu cách tìm tổng tất cả các phần tử/số của mảng đã cho. Có nhiều cách tiếp cận để giải quyết vấn đề bằng cách sử dụng vòng lặp for, phương thức forEach[] và phương thức reduce[]

Dưới đây tất cả các phương pháp được mô tả với một ví dụ thích hợp

JavaScript cho vòng lặp. Chúng tôi chỉ đơn giản là sẽ lặp lại tất cả các phần tử của mảng bằng cách sử dụng vòng lặp Javascript for để tìm tổng

Ví dụ

Javascript




Sum is 44
9

Sum is 44
0
Sum is 44
1

Sum is 44
0
Sum is 44
3
Sum is 44
4

Sum is 44
0

Sum is 44
0
Sum is 44
1

Sum is 44
0
Sum is 44
3
Sum is 44
4

Sum is 44
0

Sum is 44
0
Sum is 44
7

Sum is 44
0
Sum is 44
9
Sum using Reduce method: 44
0

Sum using Reduce method: 44
1
Sum using Reduce method: 44
2

Sum is 44
0
Sum using Reduce method: 44
4

Sum is 44
0

Sum is 44
0_______57
Sum using Reduce method: 44
8
Sum using Reduce method: 44
9
Sum is 44
90

Sum is 44
91

đầu ra

Sum is 44

Phương thức JavaScript forEach[]. Chúng ta sẽ sử dụng phương thức Javascript forEach[] của mảng để tính tổng

Javascript




Sum is 44
9

Sum is 44
0
Sum is 44
1

Sum is 44
0
Sum is 44
3
Sum is 44
4

Sum is 44
0

Sum is 44
0
Sum is 44
1

Sum is 44
0
Sum is 44
3
Sum is 44
4

Sum is 44
0

Sum is 44
0
Sum is 44
06

Sum is 44
0
Sum is 44
08

Sum using Reduce method: 44
1____210

Sum is 44
0
Sum is 44
12

Sum is 44
0

Sum is 44
0
Sum is 44
90

Sum is 44
0
Sum using Reduce method: 44
7
Sum using Reduce method: 44
8
Sum is 44
19

Sum is 44
91

đầu ra

Sum is 44

JavaScript giảm [] Phương pháp. Chúng ta sẽ sử dụng phương thức Javascript reduce[] để tìm tổng của mảng

Hai tổng — Đây có thể là một trong những câu hỏi thuật toán phong phú nhất hiện có và do đó, nên được thực hành rộng rãi

Mặc dù đây là một câu hỏi phổ biến, nhưng có nhiều biến thể của vấn đề này có thể khiến nhà phát triển gặp khó khăn trong một cuộc phỏng vấn

Một hạn chế có thể được sử dụng trong một cuộc phỏng vấn là không cho phép sắp xếp mảng đầu vào. Ràng buộc này là một cách tuyệt vời để đánh giá xem ứng viên có hiểu biết thấu đáo về cấu trúc dữ liệu và độ phức tạp về thời gian có thể có của chúng hay không

Bài viết này sẽ đi sâu vào vấn đề Hai Sum. Sau đây là mô tả vấn đề mà chúng tôi sẽ sử dụng

Đưa ra một mảng các số nguyên, trả về một mảng chứa các chỉ số của hai số cộng với một mục tiêu cụ thể. Có thể giả định rằng mỗi đầu vào sẽ có chính xác một giải pháp và cùng một phần tử có thể không được sử dụng hai lần. Cuối cùng, mảng không thể được sắp xếp

Hiểu vấn đề

Dòng đầu tiên của mô tả vấn đề rất cụ thể. đã cho một mảng, trả về các chỉ mục của hai số cộng với một mục tiêu nhất định. Ngoài ra, rõ ràng là giá trị trả về phải là một mảng bao gồm cả hai chỉ mục

Chắc chắn rằng một mảng các số nguyên được đưa ra, nhưng mô tả này không rõ ràng về việc mục tiêu có thể là

Sum using Reduce method: 44
1 hay một loại dữ liệu bên cạnh
Sum using Reduce method: 44
2 hay không. Chẳng hạn, mục tiêu có thể là
Sum using Reduce method: 44
3, là một
Sum using Reduce method: 44
4 nhưng có thể bị ép buộc thành một
Sum using Reduce method: 44
2

Trong một cuộc phỏng vấn, đây sẽ là những câu hỏi tuyệt vời để hỏi một người phỏng vấn. Đối với mục đích của câu hỏi này, giả sử rằng mục tiêu sẽ luôn là một số nguyên của kiểu dữ liệu

Sum using Reduce method: 44
2

Câu thứ hai giải thích rằng chỉ có một giải pháp trong một mảng nhất định cho một số mục tiêu đã đặt. Vì vậy, cặp số đầu tiên có tổng bằng số mục tiêu có thể được trả về mà không gây ra ngoại lệ

Ngoài ra, cùng một yếu tố không thể được sử dụng hai lần. Điều này có nghĩa là một yếu tố không thể được thêm vào chính nó để đạt được số mục tiêu

Cuối cùng, dòng cuối cùng chỉ ra rằng mảng không thể được sắp xếp

Bây giờ vấn đề đã được giải thích, hãy chia nó thành các yêu cầu nhỏ. Điều này sẽ hữu ích cho việc tạo ra một thuật toán

  1. Cho một mảng các số nguyên và một số nguyên
  2. Tìm hai số có tổng bằng đầu vào số nguyên, rồi trả về chỉ số của chúng
  3. Giá trị trả về phải là một mảng với các chỉ mục được lưu trữ bên trong nó
  4. Không thể sử dụng cùng một phần tử tại một chỉ mục nhất định hai lần
  5. Chỉ có một giải pháp cho mảng đã cho và số nguyên đích
  6. Không cho phép sắp xếp

Các trường hợp thử nghiệm

Vấn đề này thực sự khá đơn giản, vì vậy không cần thiết phải bao gồm nhiều trường hợp cạnh; . số nguyên âm

Mô tả vấn đề không nói rằng các số nguyên phải dương. Vì vậy, một trường hợp thử nghiệm có các phần tử âm trong mảng và một trường hợp có số mục tiêu âm sẽ là khôn ngoan khi đưa vào bộ thử nghiệm

Người ta có thể bao gồm nhiều bài kiểm tra nếu cần, nhưng đây là những trường hợp kiểm tra cho bài viết này

  1. Sum using Reduce method: 44
    7
  2. Sum using Reduce method: 44
    8
  3. Sum using Reduce method: 44
    9

Đã đến lúc lên kế hoạch cho một thuật toán

Ghi chú.

Sum using Reduce method: 44
0 sẽ đại diện cho tài sản
Sum using Reduce method: 44
20 của
Sum using Reduce method: 44
21

Thuật toán Brute Force không đầy đủ

Vì bản chất của bài toán này là tìm cặp phần tử có tổng bằng một số nào đó nên logic của bài toán này rất dễ hiểu

  1. Đối với
    Sum using Reduce method: 44
    22 trong
    Sum using Reduce method: 44
    21, hãy kiểm tra tổng của
    Sum using Reduce method: 44
    22 và
    Sum using Reduce method: 44
    25 so với mục tiêu. Nếu
    Sum using Reduce method: 44
    26, trả về các chỉ số của
    Sum using Reduce method: 44
    22 và
    Sum using Reduce method: 44
    25
  2. Lặp lại qua
    Sum using Reduce method: 44
    21, kiểm tra từng phần tử cộng với mọi phần tử có chỉ số cao hơn cho đến khi tìm thấy cặp chính xác

Đây là một giải pháp vũ phu. Đây không phải là một giải pháp hiệu quả, vì nó yêu cầu lặp đi lặp lại trên

Sum using Reduce method: 44
21 nhiều lần trước khi tìm thấy cặp mong muốn

Trong hầu hết các trường hợp, sẽ có một trường hợp thử nghiệm có một mảng có hàng nghìn phần tử. Bây giờ, hãy tưởng tượng rằng các phần tử có

Sum using Reduce method: 44
26 nằm ở chỉ mục
Sum using Reduce method: 44
32

Để đạt được hai phần tử đó, các phần tử

Sum using Reduce method: 44
33 từ
Sum using Reduce method: 44
21 phải được lặp lại trên mỗi lần lặp của vòng lặp cho
Sum using Reduce method: 44
22

Hãy nhớ rằng,

Sum using Reduce method: 44
22 phải được tính tổng với mọi phần tử sau nó trong
Sum using Reduce method: 44
21, vì các phần tử trước
Sum using Reduce method: 44
22 đã được kiểm tra

Vòng lặp lồng nhau này sẽ dẫn đến hàng nghìn lần lặp không cần thiết

Đây là sơ đồ mô tả chi tiết số lần lặp lại cần thiết để kiểm tra toàn bộ

Sum using Reduce method: 44
21. Hãy ghi nhớ, đây là một đầu vào rất nhỏ;

Cửa sổ màu đỏ đại diện cho

Sum using Reduce method: 44
22. Cửa sổ màu xanh lá cây đại diện cho tất cả các yếu tố phải được thêm vào bằng
Sum using Reduce method: 44
22 để kiểm tra
Sum using Reduce method: 44
26. Đối với mỗi phần tử trong cửa sổ màu xanh lá cây, có một lần lặp

Thể hiện bằng thuật ngữ toán học, có

Sum using Reduce method: 44
43 cặp khả dĩ trong một
Sum using Reduce method: 44
21. Vì vậy, thời gian dài nhất [trường hợp xấu nhất] mà thuật toán này có thể mất là __645 thời gian, cực kỳ kém hiệu quả

Như mọi người có thể thấy, giải pháp brute force không lý tưởng cho các đầu vào

Sum using Reduce method: 44
21 lớn

Phải có một cách để giảm thiểu số lần lặp lại cần thiết để tìm đúng cặp. Có cấu trúc dữ liệu nào cho phép thời gian tra cứu

Sum using Reduce method: 44
47 liên tục không?

Bảng băm

Bảng băm là tập hợp các cặp khóa và giá trị. Hàm băm được sử dụng để ánh xạ giá trị tới chỉ mục, còn được gọi là khóa. Các cặp khóa và giá trị này cho phép thời gian tra cứu liên tục

Trong JavaScript, chúng ta có thể sử dụng một

Sum using Reduce method: 44
48 để tạo một bảng băm. Đây là một ví dụ về bảng băm đơn giản

Như được hiển thị trong các dòng 6–9, có thể truy cập

Sum using Reduce method: 44
49 của từng phần tử từ
Sum using Reduce method: 44
20 bằng cách tham chiếu
Sum using Reduce method: 44
21 trong
Sum using Reduce method: 44
22

Lợi ích chính của việc sử dụng bảng băm là thời gian tra cứu

Sum using Reduce method: 44
47. Thay vì cần lặp qua danh sách các giá trị để tìm giá trị chính xác, khi các giá trị được ánh xạ tới một số loại khóa duy nhất, giá trị có thể được tham chiếu ngay lập tức bằng cách sử dụng khóa của nó

Tạo một thuật toán hiệu quả hơn

Vì vậy, một ý tưởng khôn ngoan là sử dụng bảng băm cho Hai tổng;

Giải pháp brute force có hai vòng lặp, một vòng lồng vào bên trong vòng kia. Vòng lặp mất nhiều thời gian hơn là vòng lặp lồng nhau vì nó đi qua

Sum using Reduce method: 44
21 nhiều lần. Vòng lặp lồng nhau được tô màu xanh lá cây trong hình trên

Nếu chỉ có vòng lặp đầu tiên, được biểu thị bằng cửa sổ màu đỏ trong hình trên, thì độ phức tạp về thời gian sẽ là

Sum using Reduce method: 44
25, vì trong trường hợp xấu nhất,
Sum using Reduce method: 44
21 sẽ cần được lặp lại hoàn toàn để tìm đúng cặp

Đó là một ý tưởng tốt để loại bỏ vòng lặp lồng nhau. Vòng lặp lồng nhau có thể được thay thế bằng bảng băm không?

Có - một bảng băm thực sự hoạt động hoàn hảo cùng với vòng lặp đơn

Vì vậy, vòng lặp sẽ lặp qua

Sum using Reduce method: 44
21 một phần tử tại một thời điểm. Điều đó có nghĩa là
Sum using Reduce method: 44
22 phải được kiểm tra đối với mọi phần tử khác trong
Sum using Reduce method: 44
21. Làm thế nào điều này có thể được thực hiện với một bảng băm?

Số sẽ ghép với

Sum using Reduce method: 44
22 là sự khác biệt giữa
Sum using Reduce method: 44
22 và
Sum using Reduce method: 44
22. Vì vậy, lưu trữ
Sum using Reduce method: 44
23 trong
Sum using Reduce method: 44
24. Sử dụng tính năng tra cứu của bảng băm, kiểm tra xem
Sum using Reduce method: 44
24 có phải là khóa trong bảng băm không

Nếu nó tồn tại trong bảng băm, điều đó có nghĩa là nó là một phần tử của

Sum using Reduce method: 44
21

Đây là một bản vẽ chi tiết bước này của thuật toán. Đối với mục đích của bản vẽ này, các đầu vào là.

Sum using Reduce method: 44
7. Ngoài ra,
Sum using Reduce method: 44
28 trong vòng lặp

Đôi khi, bút và giấy là cần thiết

Câu trả lời cho các đầu vào này là

Sum using Reduce method: 44
29, vì
Sum using Reduce method: 44
70 và
Sum using Reduce method: 44
71 tại các chỉ số
Sum using Reduce method: 44
72 và
Sum using Reduce method: 44
70 tương ứng bao gồm cặp số có tổng bằng
Sum using Reduce method: 44
74

Thuật toán được tán thành ở trên đã tìm thành công phần tử chính xác bằng cách tra cứu

Sum using Reduce method: 44
24 trong
Sum using Reduce method: 44
22 để tìm phần tử đó nếu nó tồn tại. Sau đó, nó trả về chỉ mục của
Sum using Reduce method: 44
77 và được sử dụng trong giá trị trả về,
Sum using Reduce method: 44
29.
Sum using Reduce method: 44
72 đại diện cho chỉ số của
Sum using Reduce method: 44
22 trong
Sum using Reduce method: 44
21

Tuy nhiên, lưu ý duy nhất đối với thuật toán này là phần tử không được kết hợp với chính nó để khớp với

Sum using Reduce method: 44
22. Tuy nhiên, một kiểm tra đơn giản của
Sum using Reduce method: 44
83 sẽ loại bỏ trường hợp cạnh đó

Vì vậy, thuật toán cuối cùng là

  1. Tạo một đối tượng chứa các cặp khóa-giá trị của phần tử và chỉ mục của nó, tương ứng
  2. Lặp lại thông qua
    Sum using Reduce method: 44
    21. Đối với
    Sum using Reduce method: 44
    22, tính toán
    Sum using Reduce method: 44
    24
  3. Nếu
    Sum using Reduce method: 44
    24 tồn tại trong
    Sum using Reduce method: 44
    22 và
    Sum using Reduce method: 44
    83, hãy trả về các chỉ số của từng phần tử
  4. Nếu
    Sum using Reduce method: 44
    24 không tồn tại hoặc chỉ số của cả hai phần tử bằng nhau, hãy chuyển sang phần tử tiếp theo trong
    Sum using Reduce method: 44
    21

Triển khai thuật toán

Đầu tiên, khai báo một hàm

Sum using Reduce method: 44
92 và khai báo một biến để lưu trữ đối tượng trong

Bước tiếp theo là lặp qua mảng

Sum using Reduce method: 44
93. Thực hiện việc này trong vòng lặp
Sum using Reduce method: 44
94 để có thể thực hiện sớm
Sum using Reduce method: 44
95

Trong vòng lặp này, hãy kiểm tra xem

Sum using Reduce method: 44
24 có tồn tại trong bảng băm không. nếu có,
Sum using Reduce method: 44
97 các chỉ số chính xác. Trong trường hợp
Sum using Reduce method: 44
98, gán phần tử hiện tại làm thuộc tính trên
Sum using Reduce method: 44
99 và trỏ giá trị của nó vào chỉ mục,
Sum using Reduce method: 44
00

Đã đến lúc thử nghiệm giải pháp này trên LeetCode, để đảm bảo rằng các trường hợp thử nghiệm lớn có thể được thực thi thành công

Gần như 100%

99. 51%. Điều đó khá nhanh. Ngoài ra, toàn bộ bộ thử nghiệm đã được thực hiện thành công

Phần kết luận

Bài viết này nặng về thông tin và thuật toán, vì vậy bạn đã làm rất tốt để đi đến điểm này

Như mọi người có thể thấy, việc sử dụng bảng băm trong thuật toán của một người có thể làm giảm đáng kể độ phức tạp về thời gian của nó. Chiến lược sử dụng bảng băm trong bài toán này có thể áp dụng tốt cho nhiều bài toán khác, vì vậy hãy luôn áp dụng nó khi giải các câu hỏi khó

Làm cách nào để tính tổng hai phần tử của một mảng trong JavaScript?

Để tìm tổng các phần tử mảng trong JavaScript, bạn cần sử dụng mảng . phương pháp rút gọn[function[total, currentValue, currentIndex, array], initValue] .

Làm cách nào để tính tổng các giá trị trong một mảng JavaScript?

Để lấy tổng của một dãy số. .
Sử dụng mảng. phương thức reduce[] để lặp qua mảng
Đặt giá trị ban đầu trong phương thức giảm thành 0
Trên mỗi lần lặp, trả về tổng của giá trị tích lũy và số hiện tại

Chủ Đề