第一题
class Solution {
public int maxSubArray(int[] nums) {
int max=0;
for(int i=0;i<nums.length;i++){
int sum=0;
int j=i;
while(j<nums.length){
sum+=nums[j++];
max=Math.max(max,sum);
}
}
return max;
}
}
思路:暴力算法,计算每个连续子数组 的和,每次都把最大的数赋值给max,最后返回max。
第二题
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//在此输入您的代码...
long n=scan.nextLong();
long sum=0;
for(int i=1;;i++){
sum+=i;
if(sum>=n){
System.out.println(i);
break;
}
}
scan.close();
}
}
思路:观察可知当卡牌种类为k时,最多可以分给sum个小朋友(sum=1+2+...+k)。当有n个小朋友时,只需让sum>=n,返回此时的k即可。
第三题
package lanqiao2;
import java.util.Scanner;
//1:无需package
//2: 类名必须Main, 不可修改
public class Main9 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//在此输入您的代码...
hua();
scan.close();
}
public static boolean huiWen(int m){
String s1=Integer.toString(m);
String s2="";
for(int i=s1.length()-1;i>=0;i--){
s2+=s1.charAt(i);
}
//System.out.println(s1+"---"+s2);
return s1.equals(s2);
}
public static void hua(){
int i=20220515;
int flag=1;
while(flag==1){
i++;
int a=1;
int sum=0;
while(huiWen(i)&&sum<i){
sum+=a;
a++;
if(sum==i){
System.out.println(i);
flag=0;
break;
}
}
}
}
}
思路:首先判断这个大于i的数是否是回文数,不是的话,i++。如果是则进一步判断从一加到某个数是否正好得到i,是的话输出这个最小的数i,否则i++,继续向后判断。