2024/10/29 灵茶题单 滑动窗口 最短/最小
This commit is contained in:
parent
43eafe6a62
commit
caba747303
|
@ -0,0 +1,26 @@
|
|||
package com.cool.ling_cha_mount.sliding_windows;
|
||||
|
||||
/**
|
||||
* Created with IntelliJ IDEA.
|
||||
*
|
||||
* @Author: Cool
|
||||
* @Date: 2024/10/29/17:09
|
||||
* @Description: 209. 长度最小的子数组
|
||||
*
|
||||
*/
|
||||
public class Num209 {
|
||||
public int minSubArrayLen(int target, int[] nums) {
|
||||
int res = nums.length + 1;
|
||||
int left = 0;
|
||||
int sum = 0;
|
||||
for (int i = 0; i < nums.length; i++) {
|
||||
sum += nums[i];
|
||||
while (sum >= target) {
|
||||
res = Math.min(res, i - left + 1);
|
||||
sum -= nums[left];
|
||||
left++;
|
||||
}
|
||||
}
|
||||
return res > nums.length ? 0 : res;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,97 @@
|
|||
package com.cool.ling_cha_mount.sliding_windows;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created with IntelliJ IDEA.
|
||||
*
|
||||
* @Author: Cool
|
||||
* @Date: 2024/10/29/19:19
|
||||
* @Description: 2904. 最短且字典序最小的美丽子字符串
|
||||
*/
|
||||
public class Num2904 {
|
||||
public String shortestBeautifulSubstring(String s, int k) {
|
||||
int left = 0;
|
||||
int right = 0;
|
||||
String res = "";
|
||||
char[] chars = s.toCharArray();
|
||||
while (left <= right && right < chars.length) {
|
||||
if (chars[right] == '1') {
|
||||
k--;
|
||||
}
|
||||
if (k == 0) {
|
||||
while (chars[left] != '1') {
|
||||
left++;
|
||||
}
|
||||
if (res.isEmpty()) {
|
||||
res = s.substring(left, right + 1);
|
||||
} else {
|
||||
if (res.length() > right - left + 1) {
|
||||
res = s.substring(left, right + 1);
|
||||
} else if (res.length() == right - left + 1) {
|
||||
String ss = s.substring(left, right + 1);
|
||||
if (res.compareTo(ss) > 0) {
|
||||
res = ss;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
left++;
|
||||
k++;
|
||||
}
|
||||
right++;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
public String shortestBeautifulSubstring1(String s, int k) {
|
||||
int left = 0;
|
||||
int right = 0;
|
||||
List<int[]> list = new ArrayList<>();
|
||||
char[] chars = s.toCharArray();
|
||||
while (left <= right && right < chars.length) {
|
||||
if (chars[right] == '1') {
|
||||
k--;
|
||||
}
|
||||
if (k == 0) {
|
||||
while (chars[left] != '1') {
|
||||
left++;
|
||||
}
|
||||
if (list.isEmpty()) {
|
||||
list.add(new int[]{left, right});
|
||||
} else {
|
||||
int[] arr = list.get(0);
|
||||
if ((arr[1] - arr[0]) > right - left) {
|
||||
list.clear();
|
||||
list.add(new int[]{left, right});
|
||||
} else if ((arr[1] - arr[0]) == right - left) {
|
||||
list.add(new int[]{left, right});
|
||||
}
|
||||
}
|
||||
|
||||
left++;
|
||||
k++;
|
||||
}
|
||||
right++;
|
||||
}
|
||||
if (list.isEmpty()) {
|
||||
return "";
|
||||
}
|
||||
String ans = s.substring(list.get(0)[0], list.get(0)[1] + 1);
|
||||
for (int i = 1; i < list.size(); i++) {
|
||||
int[] arr = list.get(i);
|
||||
String ss = s.substring(arr[0], arr[1] + 1);
|
||||
if (ss.compareTo(ans) < 0) {
|
||||
ans = ss;
|
||||
}
|
||||
}
|
||||
return ans;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test() {
|
||||
shortestBeautifulSubstring("100011001", 3);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue