1.连续子数组的最大和——动态规划
输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。
要求时间复杂度为O(n)。
示例1:
输入: nums = [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
代码:
class Solution {
public int maxSubArray(int[] nums) {
int n=nums.length;
int[] arr=new int[n];//以nums[i]结尾的和最大的连续子数组的和
if(n==0){
return -1;
}
arr[0]=nums[0];
int max=nums[0];
for(int i=1;i<n;i++){
if(arr[i-1]>0){
arr[i]=arr[i-1]+nums[i];
}else{
arr[i]=nums[i];
}
max=Math.max(arr[i],max);
}
return max;
}
}
结果:
2.卡片
小蓝有 k 种卡片, 一个班有 n 位同学, 小蓝给每位同学发了两张卡片, 一 位同学的两张卡片可能是同一种, 也可能是不同种, 两张卡片没有顺序。没有 两位同学的卡片都是一样的。
给定 n, 请问小蓝的卡片至少有多少种?
代码:
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//在此输入您的代码...
int n=scan.nextInt();
for(int x=1;;x++){
if(x*(x+1)/2>=n){ //x张卡片有x*(x+1)/2种不同的分组方法
System.out.println(x);
break;
}
}
scan.close();
}
}
结果: