每日算法&面试题,大厂特训二十八天——第二十六天(循环)

119 阅读2分钟

「这是我参与2022首次更文挑战的第18天,活动详情查看:2022首次更文挑战」。

导读

在这里插入图片描述

肥友们为了更好的去帮助新同学适应算法和面试题,最近我们开始进行专项突击一步一步来。上一期我们完成了动态规划二十一天现在我们进行下一项对各类算法进行二十八天的一个小总结。还在等什么快来一起肥学进行二十八天挑战吧!! 专栏导航:上岸之路

算法特训二十八天

已知函数 signFunc(x) 将会根据 x 的正负返回特定值:

如果 x 是正数,返回 1 。 如果 x 是负数,返回 -1 。 如果 x 是等于 0 ,返回 0 。 给你一个整数数组 nums 。令 product 为数组 nums 中所有元素值的乘积。

返回 signFunc(product) 。

示例 1:

输入:nums = [-1,-2,-3,-4,3,2,1]
输出:1
解释:数组中所有值的乘积是 144 ,且 signFunc(144) = 1
示例 2:

输入:nums = [1,5,0,2,-3]
输出:0
解释:数组中所有值的乘积是 0 ,且 signFunc(0) = 0
示例 3:

输入:nums = [-1,1,-1,1,-1]
输出:-1
解释:数组中所有值的乘积是 -1 ,且 signFunc(-1) = -1
class Solution {
    public int arraySign(int[] nums) {
        int temp=0;
        for(int i=0;i<nums.length;i++){
           if(nums[i]<0){
               temp++;
           }
           if(nums[i]>0){
               continue;
           }
           if(nums[i]==0){
               return 0;
           }
        }
        if(temp%2==0){
            return 1;
        }
        return -1;
    }
}


给你长度相等的两个字符串 s1 和 s2 。一次 字符串交换 操作的步骤如下:选出某个字符串中的两个下标(不必不同),并交换这两个下标所对应的字符。

如果对 其中一个字符串 执行 最多一次字符串交换 就可以使两个字符串相等,返回 true ;否则,返回 false 。

示例 1:

输入:s1 = "bank", s2 = "kanb"
输出:true
解释:例如,交换 s2 中的第一个和最后一个字符可以得到 "bank"
示例 2:

输入:s1 = "attack", s2 = "defend"
输出:false
解释:一次字符串交换无法使两个字符串相等
示例 3:

输入:s1 = "kelb", s2 = "kelb"
输出:true
解释:两个字符串已经相等,所以不需要进行字符串交换
示例 4:

输入:s1 = "abcd", s2 = "dcba"
输出:false
class Solution {
    public boolean areAlmostEqual(String s1, String s2) {
        if (s1.equals(s2)) {
            return true;
        }
        String s1_diff = "";
        String s2_diff = "";
        for (int i = 0;i < s1.length(); ++i) {
            if (s1.charAt(i) != s2.charAt(i)) {
                s1_diff += s1.charAt(i);
                s2_diff = s2.charAt(i) + s2_diff;
                if (s1_diff.length() > 2) {
                    return false;
                }
            }
        }
        return (s1_diff.length() == 2) && (s1_diff.equals(s2_diff));
    }
}


面试题

给用户发消息任务超出队列,你用哪个拒绝策略?有其他方法吗 ?
ThreadPoolExecutor.CallerRunsPolicy
 无界队列(LinkedBlockingQuene),继续添加任务到阻塞队列中等待执行。
 用消息队列存任务数据,线程池慢慢处理


Java8 新特性有哪些了解?
 接口的默认方法
 Lambda 表达式
 函数式接口
 方法和构造函数引用
 Lamda 表达式作用域
 内置函数式接口
 Optional
 Streams(流)
 Parallel Streams(并行流)
 Maps
 Date API(日期相关 API)
 Annotations(注解)