算法面试题

Posted hhr-sun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法面试题相关的知识,希望对你有一定的参考价值。

1、最长不重复字符串

(如:abcabcd,第一步会先遇到重复字符a,则把起始的a删除,再重b开始查不重复的字符串,则为遇到重复,就去除最左端的字符)

public static void main(String[] args) {

        String str = "ababcabcd";
        //i记录起始字符, j记录当前循环的字符, max最大不重复字符串长度
        int i = 0, j = 0, max = 0;

        Set<Character> set = new HashSet<>();
        
        while (j < str.length()) {
            if (!set.contains(str.charAt(j))){
                set.add(str.charAt(j));
                j++;
            }else {
                //把起始值删除
                set.remove(str.charAt(i));
                i++;
            }
            max = Math.max(max,set.size());
        }

        System.out.println(max);
        System.out.println(set.toString());

    }

  

2、查找旋转数组的最小值

(把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1)

这个问题的中心思想其实就是使用二分查找的方法,逐步的逼近这个最小值

    public static int findMin(int a[]) {
        int low = 0;
        int high = a.length-1;
        int mid;
        while (low<high) {
            mid = (low + high) / 2;
            if (a[mid] < a[high]) {
                high = mid;//最小值在左半部分
            }else {
                low = mid + 1;//最小值在右半部分
            }
        }
        return a[low];
    }

  

 

以上是关于算法面试题的主要内容,如果未能解决你的问题,请参考以下文章

算法面试手撕代码高频题汇集

算法刷题范围建议 和 代码规范

算法刷题范围建议 和 代码规范

高频算法面试题_旋转字符串(完整的代码实现)

Java进阶之光!2021必看-Java高级面试题总结

深度学习/机器视觉/数字IC/FPGA/算法手撕代码目录总汇