Lintcode记录

作者:
淡白
创建时间:
2020-05-13 18:39:01
lintcode

摘要:这篇文章包含了三个题目的代码和解题思路。首先是39-恢复旋转排序数组,这个题目要求将一个旋转排序数组恢复成原来的排序数组。代码中使用了寻找最小值的方法来确定旋转的起点,并将数组重新排列。接下来是2-尾部的零,这个题目要求给定一个整数n,计算n的阶乘末尾零的个数。代码中使用了分解因子的方法来计算零的个数。最后是44-最小子数组,这个题目要求找到一个数组中和最小的子数组。代码中使用了动态规划的方法来找到最小子数组。

Lintcode
我的Lintcode

		}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;
}