文章有不当之处,欢迎指正,如果喜欢微信阅读,你也可以关注我的微信公众号:
好好学java,获取优质学习资源。
“算法每日学计划”16打卡: 时间限制:1.0s 内存限制:256.0MB 问题描述 已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。 输入格式 输入一个正整数N。 输出格式 输出一个整数,表示你找到的最小公倍数。 样例输入 9 样例输出 504 数据规模与约定 1 <= N <= 106。
注意:群里小伙伴解答,感谢!
解题思路: 思路分析:最大 最小公倍数,联想到两个数的求最大最小公倍数,即两个数的乘积(注:连续的两个自然数是互斥的)。
同样,我们可以拿最后三个数来做考虑。
1.当n为奇数时,n,n-1,n-2为奇偶奇,里面只有一个偶数,所以不会有2这个因子。这三个数相差不到3,所以也不会有因子3,故符合题意。
2.当n为偶数时,n,n-1,n-2为偶奇偶,此时n,n-2肯定含有因子2,所以除于2不值得。所以考虑将n-2 换成n-3,变成奇偶奇,此时也有一个问题,
n和n-3,如果n%3==0,则除于3更不值得。仍根据奇偶奇的原则,变动偶数n为n-2,此时换成n-1,n-2,n-3和1情况一样。故此时符合题意。  
“算法每日学计划”16打卡: 描述 现在,有一行括号序列,请你检查这行括号是否配对。 输入 第一行输入一个数N(0
public static void main(String[] args) {  
        Scanner sc = new Scanner(System.in);  
        int n= sc.nextInt();
        Stack<Character> stack = null;  
        while(n!=0){  
            //从控制台读入一个测试字符串[]() [(])  
            String str = sc.next();  
            //如果该输入字符串为奇数,说明不匹配  
            if(str.length() % 2 == 1){  
                System.out.println("No");  
            }else{  
                //说明字符是偶数  
                stack = new Stack<Character>();  
                for(int i=0;i<str.length();i++){  
                    if(stack.isEmpty()){  
                        //如果栈是空的  
                        stack.push(str.charAt(i));  
                    }else if(stack.peek() == '[' && str.charAt(i) == ']' || stack.peek() == '(' && str.charAt(i) == ')'){  
                        //说明此时栈中字符不是空的,并且符合,  
                        stack.pop();  
                    }else{  
                        stack.push(str.charAt(i));  
                    }  
                }  
                if(stack.isEmpty()){  
                    //如果栈是空的,说明括号匹配  
                    System.out.println("Yes");  
                }else{  
                    //说明栈不为空,括号不匹配  
                    System.out.println("No");  
                }  
            }  
            n--;  
        }  
    }  
“算法每日学计划”17打卡: 时间限制:5000 ms | 内存限制:65535 KB 难度:3 描述 给定一整型数列{a1,a2…,an},找出连续非空子串{ax,ax+1,…,ay},使得该子序列的和最大,其中,1<=x<=y<=n。 输入 第一行是一个整数N(N<=10)表示测试数据的组数) 每组测试数据的第一行是一个整数n表示序列中共有n个整数,随后的一行里有n个整数I(-100=
import java.io.BufferedInputStream;
import java.util.Arrays;
import java.util.Scanner;
public class Main{
    public static void main(String[] args) {
        Scanner cin = new Scanner(new BufferedInputStream(System.in));
        int t = cin.nextInt();
        while (t-- > 0) {
            int n = cin.nextInt();
            int[] a = new int[n + 5];
            for (int i = 1; i <= n; i++) {
                a[i] = cin.nextInt();
            }
            int[] f = new int[n + 5];
            Arrays.fill(f, 0);
            f[1] = a[1];
            for (int i = 2; i <= n; i++) {
                if (f[i - 1]  > 0)
                    f[i] = f[i - 1] + a[i];
                else
                    f[i] = a[i];
            }
            int max = Integer.MIN_VALUE;
            for (int i = 1; i <= n; i++) {
                if (max < f[i]) {
                    max = f[i];
                }
            }
            System.out.println(max);
        }
    }
}
“算法每日学计划”18打卡: 问题描述 编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20。然后程序将对这个数组进行统计,把出现次数最多的那个数组元素值打印出来。如果有两个元素值出现的次数相同,即并列第一,那么只打印比较小的那个值。 输入格式:第一行是一个整数N,N £ 20;接下来有N行,每一行表示一个整数,并且按照从小到大的顺序排列。 输出格式:输出只有一行,即出现次数最多的那个元素值。 输入输出样例 样例输入 5 100 150 150 200 250 样例输出 150
注意:群里小伙伴解答,感谢!  
 本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!
        本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!
     
                        
                        