2020shopee春招第一次的在线编程题及AC解答

时间2020年2月15日14:00~16:00

Let the code speak!

第一题

版本号比较大小
@return 0代表相等,1代表左边大,-1代表右边大
输入两个版本号,中间逗号隔开,比较大小。

package algorithm.test;

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String string = scanner.nextLine();
        String[] str = string.split(",");
        System.out.println(compareVersion(str[0],str[1]));
    }
    public static int compareVersion(String version1, String version2) {
        String[] v1 = version1.split("\\.");
        String[] v2 = version2.split("\\.");
        for (int i = 0, j = 0; i < v1.length || j < v2.length; i++, j++) {
            int one = i < v1.length ? Integer.parseInt(v1[i]) : 0;
            int two = j < v2.length ? Integer.parseInt(v2[j]) : 0;
            if (one == two) {
                continue;
            } else {
                return one > two ? 1 : -1;
            }
        }
        return 0;
    }
}

三元运算符可以很明显的提升效率。

第二题

题目描述:
已知正整数数组删除数组中重复的数字使数组满足以下条件,使1出现一次,2出现2次,3出现3次。。。。。。输出最后的数组长度。

package algorithm.test;

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String str = scanner.nextLine();
        String[] s = str.split(" ");
        int[] a = new int[s.length];
        for (int i = 0; i < s.length; i++){
            a[i] = Integer.valueOf(s[i]);
        }
        int result = 0;
        int len = a.length;
        int tmp;
        for (int i = 0 ; i < len - 1; i += tmp) {
            tmp = 0;
            for (int j = i + 1; j < len; j++) {
                if (a[i] == a[j]){
                    tmp++;
                }
            }
            tmp += 1;
            if (tmp != 0){
                if (tmp <= a[i]){
                    result += tmp;
                }else {
                    result +=a[i];
                }
            }
        }
        System.out.println(result);
    }
}

第三题

题目描述:经典问题:对于一个m*n的网格,从左上角的方格到右下角的方格,共有多少条路径(只允许向右和向下)

import java.util.Scanner;
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Solution s = new Solution();
        Scanner sc = new Scanner(System.in);
        int m = sc.nextInt();
        int n = sc.nextInt();
        System.out.println(s.uniquePaths(m,n));
    }
}
 
class Solution {
    public int uniquePaths(int m, int n) {
        int[] memo = new int[n];

        Arrays.fill(memo, 1);

        for (int i = 1; i < m; i++) {
            for (int j = 1; j < n; j++) {
                memo[j] += memo[j - 1];
            }
        }

        return memo[n - 1];
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值