www

导航

滑动窗口-和为S的连续正数序列


package slidewindow;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class ContinuousSequence {

private static List<String> findSequence(int s) {
int[] nums = new int[s];
for (int i = 0; i < s; i++) {
nums[i] = i + 1;
}
Set<Integer> window = new HashSet<>();
// 初始化游标
int left = 0, right = 0;
List<String> res = new ArrayList<>();
while (right < nums.length) {
window.add(nums[right]);
right++;
while (sumWindow(window) == s) {
res.add(strWindow(window));
window.remove(nums[left]);
left++;
}
}
return res;
}

private static int sumWindow(Set<Integer> window) {
int sum = 0;
for (Integer o : window) {
sum += o;
}
return sum;
}

private static String strWindow(Set<Integer> window) {
StringBuilder str = new StringBuilder();
for (Integer o : window) {
str.append(o);
}
return str.toString();
}

public static void main(String[] args) {
List<String> a = findSequence(3);
}

}
 

 

posted on 2019-03-12 18:59  www_practice  阅读(208)  评论(0编辑  收藏  举报