- Tạo ứng dụng Spring Boot bằng Spring Launchizr
- Cấu hình Cassandra trong Spring Boot
- Định cấu hình nhóm kết nối Tomcat trên Spring Boot
- Định tuyến tin nhắn Camel đến Artemis được nhúng bằng WildFly
Trang chủ blog: Một chuyên gia ủng hộ việc học tập công nghệ
Bài viết hôm nay tôi mang đến cho các bạn là"Cuộc thi hàng tuần lần thứ 280 của LeetCode"
🍣
Mong các bạn kiên nhẫn đọc bài viết này
🙏Blogger cũng đang trong giai đoạn tìm hiểu. Nếu bạn gặp bất kỳ vấn đề gì, vui lòng cho chúng tôi biết. Cảm ơn bạn rất nhiều.🙏
💗Đồng thời, tôi rất biết ơn sự hỗ trợ của tất cả bạn bè.💗
Nhận toán hạng bằng 0
Bạn được cho hai số nguyên không âm số 1
Và số 2
.
Trong mỗi thao tác, nếu số1 >= số2
, bạn phải sử dụng số 1
giảm bớt số 2
; Nếu không, bạn phải sử dụng > số 2
giảm bớt số 1
.
số 1 = 5
Và số2 = 4
, nên sử dụng số 1
giảm bớt số 2
, do đó, nhận đượcsố1 = 1
Và số2 = 4
. Tuy nhiên, nếu số 1 = 4
Và số2 = 5
, sau một bước thao tác, chúng ta có được số 1 = 4
Và số2 = 1
.trở lại để làm số1 = 0
hoặc số2 = 0
của các toán hạng.
Ví dụ 1
:Đầu vào: num1 = 2, num2 = 3 Đầu ra: 3 Giải thích: - Phép toán 1: num1 = 2, num2 = 3. Vì num1 < num2, num2 trừ num1 mang lại num1 = 2, num2 = 3 - 2 = 1. - Phép toán 2: num1 = 2, num2 = 1. Vì num1 > num2 nên num1 trừ num2. - Phép toán 3: num1 = 1, num2 = 1. Vì num1 == num2, num1 trừ num2. Lúc này num1 = 0, num2 = 1. Vì num1 == 0 nên không cần phải làm gì thêm. Vậy tổng số thao tác là 3.
Ví dụ 2
:Đầu vào: num1 = 10, num2 = 10 Đầu ra: 1 Giải thích: - Phép toán 1: num1 = 10, num2 = 10. Vì num1 == num2, hãy trừ num2 khỏi num1 để có num1 = 10 - 10 = 0. Lúc này num1 = 0, num2 = 10. Vì num1 == 0 nên không cần phải làm gì thêm. Vậy tổng số thao tác là 1.
0 <= số1, số2 <= 10^5
Ý tưởng
Câu hỏi này là một câu hỏi đăng nhập. Cách tiếp cận của tôi là mô phỏng quá trình này.số1 > số2
khi nào, tiếp tụcsố1 = số1 - số2
và đếm khi nàosố1 < số2
khi nào chúng ta sẽ tiếp tụcsố2 = số2 - số1
Và đếm; nếu hai số bằng nhau thì đếm và thoát khỏi vòng lặp.
class Giải pháp { public int countOperations(int num1, int num2) { int cnt = 0; while(num1 != 0 && num2 != 0){ if(num1 > num2){ num1 = num1 - num2 }else if(num1; < num2){ num2 = num2 - num1; }else{ cnt ++; cnt++; } trả về cnt } }
Số thao tác tối thiểu để biến một mảng thành một mảng xen kẽ
Cung cấp cho bạn một đăng ký từ 0
mảng bắt đầu số
, mảng bao gồm N
gồm các số nguyên dương.
Nếu thỏa mãn các điều kiện sau thì mảng số
là một mảng xen kẽ:
số[i - 2] == số[i]
,TRONG 2 <= tôi <= n - 1
.nums[i - 1] != nums[i]
,TRONG 1 <= tôi <= n - 1
.Trong một bước, bạn có thể chọn đăng ký Tôi
và sẽ số [i]
Thay đổi thành bất kỳ số nguyên dương nào.
Trả về số thao tác tối thiểu cần thiết để biến một mảng thành một mảng xen kẽ.
Ví dụ 1
:Đầu vào: nums = [3,1,3,2,4,3] Đầu ra: 3 Giải thích: Một cách để biến một mảng thành một mảng xen kẽ là chuyển đổi mảng thành [3,1,3,1,3,1 ] . Trong trường hợp này, toán hạng là 3. Có thể chứng minh rằng khi số toán hạng nhỏ hơn 3 thì mảng không thể chuyển thành mảng xen kẽ.
Ví dụ 2
:Đầu vào: nums = [1,2,2,2,2] Đầu ra: 2 Giải thích: Một cách để tạo một mảng thành một mảng xen kẽ là chuyển đổi mảng thành [1,2,1,2,1]. trường hợp, toán hạng là 2. Lưu ý rằng mảng không thể được chuyển đổi thành [2,2,2,2,2]. Bởi vì trong trường hợp này, nums[0] == nums[1], điều kiện mảng xen kẽ không được đáp ứng.
1 <= số.độ dài <= 105
1 <= số[i] <= 105
Ý tưởng
Bởi vì mục đích chính của chúng ta ở đây là đếm số chỉ số dưới và số chẵn, sau đó chọn số lớn nhất trong số chỉ số dưới và số chẵn làm số mà chúng ta muốn sửa đổi. Vì vậy chúng ta cần sắp xếp số lần xuất hiện của chúng từ lớn đến nhỏ. Nếu bạn sử dụng bảng băm, bạn không thể sắp xếp theo số lần xuất hiện. Sau khi sắp xếp, nếu các số có số lần xuất hiện nhiều nhất không bằng nhau thì chúng ta sử dụng trực tiếp hai số này, nếu không, chúng ta cần sử dụng số có số lần xuất hiện lớn thứ hai để tìm giá trị nhỏ nhất và trả về giá trị đó.
class Giải pháp { public int MinimalOperations(int[] nums) { int[][] cnt1 = new int[100010][2]; int[][] cnt2 = new int[100010][2] for(int i = 0; i < cnt1.length; i ++){ cnt1[i][0] = i; cnt2[i][0] = i } for(int i = 0; i < nums.length; i ++){ if(i % 2 == 0){ cnt1[nums[i]][1] ++ }else if(i % 2 ==; 1){ cnt2[nums[i]][1] ++; } } Arrays.sort(cnt1,(a1,b1) -> b1[1] - a1[1]); Arrays.sort(cnt2,(a1,b1) -> b1[1] - a1[1]); if(cnt1[0][0] != cnt2[0][0]) return nums.length - (cnt1[0][1] + cnt2[0][1]); trả về nums.length - Math.max(cnt1[0][1] + cnt2[1][1], cnt1[1][1] + cnt2[0][1]);
Lấy ra số lượng đậu thần tối thiểu
Cung cấp cho bạn một dãy số nguyên dương đậu
, trong đó mỗi số nguyên biểu thị số hạt đậu thần trong một túi.
Hãy lấy ra một số hạt đậu từ mỗi túi (hoặc không) sao cho số lượng đậu thần trong các túi không rỗng còn lại (tức là các túi có ít nhất một hạt đậu thần) bằng nhau. Sau khi đậu thần đã được lấy ra khỏi túi, bạn không thể cho nó vào bất kỳ túi nào khác.
Vui lòng trả lại số lượng đậu thần tối thiểu bạn cần lấy ra.
Ví dụ 1
:Đầu vào: Beans = [4,1,6,5] Đầu ra: 4 Giải thích: - Ta lấy 1 hạt đậu thần từ túi chứa 1 hạt đậu thần. Số đậu thần trong túi còn lại là: [4,0,6,5] - Sau đó ta lấy ra 2 đậu thần từ túi có 6 đậu thần. Số đậu thần trong túi còn lại là: [4,0,4,5] - Sau đó ta lấy 1 đậu thần trong túi có 5 đậu thần. Số đậu thần trong túi còn lại là: [4,0,4,4] Tổng cộng có 1 + 2 + 1 = 4 đậu thần đã được lấy ra và số đậu thần ở các túi không rỗng còn lại là bằng nhau. Không có giải pháp nào ngắn hơn việc lấy ra 4 hạt đậu thần.
Ví dụ 2
:Đầu vào: đậu = [2,10,3,2] Đầu ra: 7 Giải thích: - Ta lấy ra 2 hạt đậu thần từ một trong các túi chứa 2 hạt đậu thần. Số hạt đậu thần trong túi còn lại là: [0,10,3,2] - Sau đó ta lấy 2 hạt đậu thần ở túi khác có 2 hạt đậu thần. Số hạt đậu thần trong túi còn lại là: [0,10,3,0] - Sau đó ta lấy ra 3 hạt đậu thần từ trong túi có 3 hạt đậu thần. Số đậu thần trong túi còn lại là: [0,10,0,0] Tổng cộng có 2 + 2 + 3 = 7 đậu thần đã được lấy ra và số đậu thần trong các túi không rỗng còn lại là bình đẳng. Không có giải pháp nào ngắn hơn việc lấy ra 7 hạt đậu thần.
1 <= đậu.length <= 105
1 <= đậu[i] <= 105
Ý tưởng
Những gì chúng ta có ở đây là một bảng liệt kê đậu
tất cả các giá trị có thể có trong mảng khi đó sẽ nhỏ hơn đậu [i]
Số được đặt thành 0
, sẽ lớn hơn đậu [i]
Con số giảm xuống đậu [i]
. Ở đây chúng tôi chỉ xử lý trước mộtTiền tố và mảng
Cung cấp hỗ trợ, và sau đó tìm giá trị tối thiểu.
class Solution { public long minminival(int[] Beans) { /** Câu hỏi này tương tự như câu hỏi về việc đặt lại trình tự trong cuộc thi hàng tuần ở acwing. Câu hỏi của nó là về số phép toán cần thiết để biến tất cả các số thành cùng một số, nhưng ở đây chúng ta có thể thực hiện các phép toán trong một phạm vi và cách tiếp cận của nó là liệt kê các số trong tất cả các phạm vi */ long ans = Long. MAX_VALUE; int len = Beans.length; long[] s = new long[len + 1]; Arrays.sort(beans); for(int i = 1; i <= len; i ++) s[ i ] = s[i - 1] + Beans[i - 1]; for(int i = 0; i < len; i ++){ ans = Math.min(ans,s[i + 1] + (s[len] - s[i + 1]) - (long)beans[i] * (len - i)); } return ans;
Tôi là một lập trình viên xuất sắc, rất giỏi!