快手面试算法题合集
2025-04-04 12:00   17

1.力扣原题:最长不重复序列

import java.util.*;
public class kuaishou {
    public static void main(String[] args){
    Scanner in=new Scanner(System.in);
    String s=in.nextLine();
    System.out.println(longestPalindrome(s));
    }
    public static String longestPalindrome(String s){
        if(s==null ||s.length()==0){
            return "";
        }
        int[] range=new int[2];
        char[] str=s.toCharArray();
        for(int i=0;i<s.length();i++){
            i=findLongest(str,i,range);
        }
        return s.substring(range[0],range[1]+1);
    }
    public static int findLongest(char[] str,int low,int[] range){
        //查找中间部分
        int high=low;
        while(high<str.length-1 &&str[high+1]==str[low]){
            low--;
            high++;
        }
        int ans=high;
        //从z中间向左右扩散
        while(low>0 &&high<str.length-1 &&str[low-1]==str[high+1]){
            low--;
            high++;
        }
        if(high-low>range[1]-range[0]){
            range[0]=low;
            range[1]=high;
        }
        return ans;
    }
}

2.左边的数比它小,右边的数比它大

import java.util.*;
public class kuaishou {
    public static void main(String[] args){
    Scanner sc=new Scanner(System.in);
    int n=sc.nextInt();
    sc.nextLine();
    int[] array=new int[n];
    int index=0;
    while(index<n){
        array[index]=sc.nextInt();
        index++;
    }
    int[] mos=new int[n];
    findMiddle(array,mos);
        for (int i = 0; i < array.length; i++) {
            if (mos[i] == 2) {
                System.out.print(array[i]);
                System.out.print(" ");
            }
        }
    }
    public static void findMiddle(int[] arr,int[] mos){
        if (null == arr || arr.length <= 2) {
            return;
        }
        int max = 0;
        int min = arr.length-1;
        for (int i = 0; i < arr.length; i++) {
            //max=arr[max]<=arr[i]?i:max;
            if(arr[max]<=arr[i]){
                max=i;
            }
            if (max == i) {
                mos[i]++;
            }
        }
        for (int i = arr.length-1; i >=0; i--) {
            //min=arr[min]>=arr[i]?i:min;
            if(arr[min]>=arr[i]){
                min=i;
            }
            if (min == i) {
                mos[i]++;
            }
        }
    }
}

用两个栈实现队列:力扣面试题09

class CQueue {
    LinkedList<Integer> stack1;
	LinkedList<Integer> stack2;

	public CQueue() {
		stack1 = new LinkedList<>();
		stack2 = new LinkedList<>();
	}

	public void appendTail(int value) {
		stack1.add(value);
	}

	public int deleteHead() {
		if (stack2.isEmpty()) {
			if (stack1.isEmpty()) return -1;
			while (!stack1.isEmpty()) {
				stack2.add(stack1.pop());
			}
			return stack2.pop();
		} else return stack2.pop();
	}
}

出现1的次数:力扣233

import java.util.*;
public class kuaishou {
    public static void main(String[] args){
    Scanner sc=new Scanner(System.in);
    int n=sc.nextInt();
    System.out.println(count(n));
    }
    public static int count(int n){
        int base = 1;
        int count = 0;
        int weight = 0;
        int round = 0;
        int temp = n;
        while(temp>0){
            weight = temp%10;
            round = temp/10;
            temp = round;
            count += round*base;
            if(weight>1){
                count += base;
            }else if(weight == 1){
                count += n%base+1;
            }
            base = base*10;
        }
        return count;
    }
}

力扣1302:最深叶子结点的和

class Solution {
    public int deepestLeavesSum(TreeNode root) {
        if (root == null) return 0;
        
        int num = 0;
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);
        while (!queue.isEmpty()) {
            num = 0;
            int size = queue.size();
            for (int i = 0; i < size; i++) {
                TreeNode node = queue.poll();
                num += node.val;
                if (node.left != null) queue.offer(node.left);
                if (node.right != null) queue.offer(node.right);
            }
        }
        return num;
    }
}

剑指offer:全排列

import java.util.ArrayList;
import java.util