Solutions Problems October

 Cũng gần 3 tháng rồi mình chưa bắt đầu lại thói quen này, viết vậy đủ hiểu độ trì của bản thân. 

Minimum Number of Arrows to Burst Balloons

There are some spherical balloons spread in two-dimensional space. For each balloon, provided input is the start and end coordinates of the horizontal diameter. Since it's horizontal, y-coordinates don't matter, and hence the x-coordinates of start and end of the diameter suffice. The start is always smaller than the end.

An arrow can be shot up exactly vertically from different points along the x-axis. A balloon with xstart and xend bursts by an arrow shot at x if xstart ≤ x ≤ xend. There is no limit to the number of arrows that can be shot. An arrow once shot keeps traveling up infinitely.

Given an array points where points[i] = [xstart, xend], return the minimum number of arrows that must be shot to burst all balloons.

 

Example 1:

Input: points = [[10,16],[2,8],[1,6],[7,12]]
Output: 2
Explanation: One way is to shoot one arrow for example at x = 6 (bursting the balloons [2,8] and [1,6]) and another arrow at x = 11 (bursting the other two balloons).

Example 2:

Input: points = [[1,2],[3,4],[5,6],[7,8]]
Output: 4

Example 3:

Input: points = [[1,2],[2,3],[3,4],[4,5]]
Output: 2

Example 4:

Input: points = [[1,2]]
Output: 1

Example 5:

Input: points = [[2,3],[2,3]]
Output: 1

 

Constraints:

  • 0 <= points.length <= 104
  • points.length == 2
  • -231 <= xstart < xend <= 231 - 1
Solution: Bài này dạng Greedy (Tham lam)
Source code:

Đề bài: rút gọn xâu s nhưng giữ xâu rút gọn theo thứ tự và từ điển nhỏ nhất, ví dụ: bcabc -> abc
Solution: stack
Sourcecode: 

..
1007. Minimum Domino Rotations For Equal Row
Medium

In a row of dominoes, A[i] and B[i] represent the top and bottom halves of the ith domino.  (A domino is a tile with two numbers from 1 to 6 - one on each half of the tile.)

We may rotate the ith domino, so that A[i] and B[i] swap values.

Return the minimum number of rotations so that all the values in A are the same, or all the values in B are the same.

If it cannot be done, return -1.

 

Example 1:

Input: A = [2,1,2,4,2,2], B = [5,2,6,2,3,2]
Output: 2
Explanation: 
The first figure represents the dominoes as given by A and B: before we do any rotations.
If we rotate the second and fourth dominoes, we can make every value in the top row equal to 2, as indicated by the second figure.

Example 2:

Input: A = [3,5,1,2,3], B = [3,6,3,3,4]
Output: -1
Explanation: 
In this case, it is not possible to rotate the dominoes to make one row of values equal.

 

Constraints:

  • 2 <= A.length == B.length <= 2 * 104
  • 1 <= A[i], B[i] <= 6
..
Mình đã nghĩ 2 ngày mới ra được bài toán này, không kịp nộp để nhận thưởng, mình chán Window quá đi gõ blog cũng đơ.

Có 6 khả năng tất cả các phần từ của A,B trùng nhau là 1,2,3,4,5,6.
Do đề bài không yêu cầu băt buộc A hay B phải trùng nhau, nên luôn có 2 trường hợp là nên swap A về B hay B về A thì ít tốn bước hơn.
Giả sử độ dài A là n, cũng là độ dài B, số con 1 của A là a, số con 1 của B là b, như thế để A toàn là 1 thì cần ít nhất n-a con một của B nhưng mà phải khác nhau vị trí.
Và vậy b=n-a. => a+b=n.
Vấn đề khác nhau vị trí là quan trọng, ví dụ: 1 1 1 2 3 4 và 1 1 1 4 5 6 dù 3+3=6(=n) nhưng do trùng nhau 3 con 1 nên không thể swap được.
Vậy a+b-same(A,B)=n, và có 2 cách một là swap A->B với a cách và swap B->A với b-same(A,B)

Nói tóm lại chúng ta sẽ tính từng khả năng liệu có thể tất cả là 1, hay 2,3,4,5,6, ví dụ với 1,  mỗi cái chúng ta sẽ đếm xem A có bao nhiêu con 1 gọi là a, B có bao nhiêu con 1 goi là b, A và B trùng nhau vị trí bao nhiêu con 1 gọi là same.
Thì a+b-same=n tức là lúc đó chúng ta có thể swap A và B theo một cách nào đó để A hoặc B đều là các quân giống nhau. 

Source code:
..
  Clone Graph

Given a reference of a node in a connected undirected graph.

Return a deep copy (clone) of the graph.

Each node in the graph contains a val (int) and a list (List[Node]) of its neighbors.

class Node {
    public int val;
    public List<Node> neighbors;
}

 

Test case format:

For simplicity sake, each node's value is the same as the node's index (1-indexed). For example, the first node with val = 1, the second node with val = 2, and so on. The graph is represented in the test case using an adjacency list.

Adjacency list is a collection of unordered lists used to represent a finite graph. Each list describes the set of neighbors of a node in the graph.

The given node will always be the first node with val = 1. You must return the copy of the given node as a reference to the cloned graph.

 

Example 1:

Input: adjList = [[2,4],[1,3],[2,4],[1,3]]
Output: [[2,4],[1,3],[2,4],[1,3]]
Explanation: There are 4 nodes in the graph.
1st node (val = 1)'s neighbors are 2nd node (val = 2) and 4th node (val = 4).
2nd node (val = 2)'s neighbors are 1st node (val = 1) and 3rd node (val = 3).
3rd node (val = 3)'s neighbors are 2nd node (val = 2) and 4th node (val = 4).
4th node (val = 4)'s neighbors are 1st node (val = 1) and 3rd node (val = 3).

Example 2:

Input: adjList = [[]]
Output: [[]]
Explanation: Note that the input contains one empty list. The graph consists of only one node with val = 1 and it does not have any neighbors.

Example 3:

Input: adjList = []
Output: []
Explanation: This an empty graph, it does not have any nodes.

Example 4:

Input: adjList = [[2],[1]]
Output: [[2],[1]]

 

Constraints:

  • 1 <= Node.val <= 100
  • Node.val is unique for each node.
  • Number of Nodes will not exceed 100.
  • There is no repeated edges and no self-loops in the graph.
  • The Graph is connected and all nodes can be visited starting from the given node.
..
Bài này ý tưởng mình dùng DFS để duyệt, dùng map để đánh dấu đỉnh đã đi rồi (khi nó quay vòng lại là return).
Sourcecode:

..
  Asteroid Collision

We are given an array asteroids of integers representing asteroids in a row.

For each asteroid, the absolute value represents its size, and the sign represents its direction (positive meaning right, negative meaning left). Each asteroid moves at the same speed.

Find out the state of the asteroids after all collisions. If two asteroids meet, the smaller one will explode. If both are the same size, both will explode. Two asteroids moving in the same direction will never meet.

 

Example 1:

Input: asteroids = [5,10,-5]
Output: [5,10]
Explanation: The 10 and -5 collide resulting in 10.  The 5 and 10 never collide.

Example 2:

Input: asteroids = [8,-8]
Output: []
Explanation: The 8 and -8 collide exploding each other.

Example 3:

Input: asteroids = [10,2,-5]
Output: [10]
Explanation: The 2 and -5 collide resulting in -5. The 10 and -5 collide resulting in 10.

Example 4:

Input: asteroids = [-2,-1,1,2]
Output: [-2,-1,1,2]
Explanation: The -2 and -1 are moving left, while the 1 and 2 are moving right. Asteroids moving the same direction never meet, so no asteroids will meet each other.

 

Constraints:

  • 1 <= asteroids <= 104
  • -1000 <= asteroids[i] <= 1000
  • asteroids[i] != 0
..
Các tiểu hành tinh sẽ va chạm với nhau khi tiến về phía nhau, theo quy định dương thì đi về bên phải và âm thì đi về bên trái, vậy để va vào nhau thì lúc nào dương cũng phải đứng trước âm.

Để có thể quản lý phần tử đầu tiên có thể sẽ bị đâm vào ta phải dùng tới stack.

Gọi một stack như là những hành tinh còn lại sau va chạm, ban đầu bằng không.

Duyệt trên mảng các hành tinh, bất cứ cái gì đi về phía bên phải (tức là dương) sẽ được thêm vào stack, khi gặp một hành tinh đi về phía trên trái (âm), sẽ có các trường hợp xảy ra sau:

+ Trọng lượng hành tinh âm này lớn hơn phần tử đầu tiên của stack, như thế nó sẽ phá hủy hành tinh đứng đầu stack và cứ tiếp tục phá hủy hành tinh trong stack đến khi stack rỗng.

+ Trọng lượng hành tinh âm này nhỏ hơn, như thế, ta không cần làm gì cả, vì hành tinh âm nhỏ hơn này sẽ bị phá hủy bởi phần tử hiện thời của stack, mà stack ta chỉ lưu những hành tinh còn.

+ Trọng lượng hành tinh âm này bằng phần tử hiện thời của stack, như thế ta phá hủy cả hai theo nguyên tắc đề bài.

Source code:

Nhận xét

Bài đăng phổ biến từ blog này

Hiểu về Norm Regularization

Những thuật toán nền tảng trong lĩnh vực Trí tuệ nhân tạo (Artificial Intelligence I)