Lintcode记录
- 作者:
- 淡白
- 创建时间:
- 2020-05-13 18:39:01
- lintcode
摘要:这篇文章包含了三个题目的代码和解题思路。首先是39-恢复旋转排序数组,这个题目要求将一个旋转排序数组恢复成原来的排序数组。代码中使用了寻找最小值的方法来确定旋转的起点,并将数组重新排列。接下来是2-尾部的零,这个题目要求给定一个整数n,计算n的阶乘末尾零的个数。代码中使用了分解因子的方法来计算零的个数。最后是44-最小子数组,这个题目要求找到一个数组中和最小的子数组。代码中使用了动态规划的方法来找到最小子数组。
}else {
if(l<m){
for (int i=nums.size()/2;i<nums.size();i++){
if(nums.get(i)<min){
min=nums.get(i);
index=i;
}
}
}else {
for (int i=nums.size()-1;i>=0;i--){
if(nums.get(i)<min){
min=nums.get(i);
index=i;
}
}
}
}
//从最小位置开始
List temp=new ArrayList<Integer>();
for (int i=index;i<size;i++){
temp.add(nums.get(i));
}
for (int i=0;i<index;i++){
temp.add(nums.get(i));
}
nums.clear();
nums.addAll(temp);
}
}
public static int minSubArray(final List<Integer> nums) {
// 空判断
if (nums == null || nums.size() == 0) {
return 0;
}
// 初始值
int sum = nums.get(0);
int min = nums.get(0);
// 循环list
for (int i = 1; i < nums.size(); i++) {
// 为啥是大于0 因为本函数取值是最小连续数组以0为分界线
if (sum > 0) {
sum = nums.get(i);
} else {
sum += nums.get(i);
}
// 当前子数组和是否小于最小值
if (sum < min) {
min = sum;
}
}
return min;
}