Shopee2021校招笔试题

第一题:连续子数组的最大和
原题连接:剑指Offer 42
题目描述:
输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。
要求时间复杂度为O(n)。
解题思路:动态规划

public static int maxSubArray(int[] nums) {
     
        if (nums == null || nums.length == 0)
            return 0;
        int len = nums.length;
        int[] dp = new int[len];
        dp[0] = nums[0];
        int maxlen = 0;
        for (int i = 1; i < len; i++) {
     
            dp[i] = Math.max(dp[i - 1] + nums[i], nums[i]);
            if (dp[i] > maxlen)
                maxlen = dp[i];
        }
        return maxlen;
    }

第二题:缺失的数字
原题连接:剑指Offer 53
题目描述:
一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。
题解:二分查找

class Solution {
     
    public static void main(String[] args) {
     
        Scanner sc=new Scanner(System.in);
        String s=sc.nextLine();
        String[] str=s.split(" ");
        int[] res=new int[str.length];
        for(int i=0;i<str.length;i++)
            res[i]=Integer.parseInt(str[i]);
        System.out.println(missingNumber(res));

    }
    public static int missingNumber(int[] nums) {
     
        int left=0,right=nums.length-1;
        while (left<=right){
     
            int mid=(left+right)/2;
            if(nums[mid]==mid) left=mid+1;
            else
                right=mid-1;
        }
        return left;
    }
}

第三题:大数相加
原题连接:415
题目描述:
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。
题解:迭代法

public static String addStrings (String num1, String num2) {
     
        StringBuilder sb=new StringBuilder();
        int i=num1.length()-1,j=num2.length()-1,carry=0;
        while (i>=0||j>=0){
     
            int m=i>=0?num1.charAt(i)-'0':0;
            int n=j>=0?num2.charAt(j)-'0':0;
            int tmp=m+n+carry;
            carry=tmp/10;
            sb.append(tmp%10);
            i--;
            j--;
        }
        if(carry==1)
            sb.append(1);
        return sb.reverse().toString();
    }

你可能感兴趣的:(编程题,leetcode)