第一题
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
for(int i=0;i<n;i++){
nums1[i+m]=nums2[i];
}
Arrays.sort(nums1);
}
}
先将nums2的值都插到nums1的为零的部分,然后直接排序。
第二题
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
int nums2[]={0,0,0};
int n=nums2.length;
List<List<Integer>> list=new ArrayList<>();
Arrays.sort(nums2);
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
if(j>i+1&&nums2[j]==nums2[j-1])
continue;
for(int k=j+1;k<n;k++){
if(k>j+1&&nums2[k]==nums2[k-1])
continue;
if(n>3&&i>0){
if(nums2[i]+nums2[j]+nums2[k]==0&&nums2[i]!=nums2[i-1]){
list.add(Arrays.asList(nums2[i],nums2[j],nums2[k]));
}
}else if(n==3&&nums2[i]+nums2[j]+nums2[k]==0){
list.add(Arrays.asList(nums2[i],nums2[j],nums2[k]));
}
}
}
}
return list;
}
}
首先将nums排序,然后对nums进行三阶循环,保证每次循环的i,j,k 都不相同,然后判断此次i,j,k是否与上次相同,若相同,那么就将此次的i跳过,进行下一次循环。因为只要i,j,k每次都不和上次的相同,那就可以保证i,j,k不重复,进而保证得到的元组不重复。
第三题
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//在此输入您的代码...
int num=0;
int i;
int m=1,n=1,l=1;
for(i=4;i<=20190324;i++){
num=(m+n+l)%10000;
m=n;
n=l;
l=num;
}
System.out.println(num);
scan.close();
}
}
20190324 这个数过于庞大 无论是递归还是迭代 程序都无法正常运行, 而且int 、 long、BigDecimal等都无法、承载这么大的数 ,题目要求我们只取最后四位 , 那我们可以对每次运算出来的结果 %10000 这样每次结果就都保留最后四位数字
第四题
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//在此输入您的代码...
int count=1;
int flag=1;
for(int i=3;i<20000;i++){
flag=1;
for(int j=2;j<i;j++){
if(i%j==0){
flag=0;
break;
}
}
if(flag==1&&count<2019){
count++;
if(count==2019){
System.out.println(i);
}
}
}
scan.close();
}
}
求出一定范围内的质数,当count值等于2019时,输出对应的质数。
第五题
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();
int a=0;
int b=0;
int sum=n;
while(n>=3){
a=n/3;
b=n%3;
sum+=a;
n=a+b;
}
System.out.println(sum);
scan.close();
}
}
用a记录每次所拥有瓶盖可兑换饮料数量,b记录每次兑换时,剩余的小于3的瓶盖数,准备下一次兑换,a+b就是下一次要用来兑换的瓶盖,把它赋值给n,n表示每次拿多少个瓶盖去兑换。当n小于3时,兑换结束。用sum记录所喝饮料。