算法刷题记录

  1. A + B 问题
    给出两个整数 a 和 b , 求他们的和并以整数(int)的形式返回。
    解题思路:可以直接用+号,当然这里面试官可能不希望你使用+号。
public class Solution {
    /**
     * @param a: An integer
     * @param b: An integer
     * @return: The sum of a and b 
     */
    public int aplusb(int a, int b) {
        // write your code here
        // return a+b;
        while(b!=0) {
        	//使用异或(^)逻辑符号,异或又叫做不进位加法,所以这里会缺少进位,需要下面来补
            int a_ = a^b;
            //进位我们需要使用与(&)逻辑符号,并左移一位作为进位补进去,一直递归下去,b_最终会变成0
            int b_ = (a&b) << 1;
             a = a_;
             b = b_;
        }
        return a;
    }
}

2.两个字符串是否相等
给定两个字符串 str1 和 str2,请判断这两个字符串是否相等,不区分大小写。
解题思路:使用toUpperCase(),toLowerCase(),或者使用equalsIgnoreCase都可以实现.

import java.util.*;

public class Solution {
	public boolean judgmentString(String str1,String str2) {
        // -- write your code here --
        return str1.equalsIgnoreCase(str2);
        //return str1.toLowerCase().equals(str2.toLowerCase());
    }
}
  1. 乘积最大子数组
    找出一个整数数组 nums 中乘积最大的非空连续子数组(至少包含一个数)。如:输入:[2,3,-2,4]输出:6,或输入:[-1,2,4,1]输出:8
    解题思路:因为正数中有正有负,那么用一个数组max[i-1]存放计算到索引i-1时的最大值,min[i-1]存放当前计算的最小值,则计算i时,如果num[i]为正数,则最大值为max[i-1]*nums[i]与nums[i]的最大值,如果num[i]为负数,则最大值为min[i-1]*nums[i]与nums[i]的最大值.
public class Solution {
    /**
     * @param nums: An array of integers
     * @return: An integer
     */
    public int maxProduct(int[] nums) {
        // write your code here
        if (nums == null || nums.length<1) {
            return 0;
        }
        int[] min=new int[nums.length];
        int[] max=new int[nums.length];
        min[0]=nums[0];
        max[0]=nums[0];
        int maxRst = max[0];
        for (int i=1;i<nums.length;i++) {
            if (nums[i]>=0) {
            	//如果num[i]为正数,则最大值为max[i-1]*nums[i]与nums[i]的最大值
                max[i] = Math.max(max[i-1]*nums[i], nums[i]);
                min[i] = Math.min(min[i-1]*nums[i], nums[i]);
            } else {
            	//则最大值为min[i-1]*nums[i]与nums[i]的最大值.
                max[i] = Math.max(min[i-1]*nums[i], nums[i]);
                min[i] = Math.min(max[i-1]*nums[i], nums[i]);
            }
            //每次取出当前计算的最大值
            maxRst = Math.max(maxRst, max[i]);
        }

        return maxRst;
    }
}

你可能感兴趣的:(算法,Java面试,算法,leetcode)