2021年快手电商后端面试-算法题目分析
Posted Zody
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021年快手电商后端面试-算法题目分析相关的知识,希望对你有一定的参考价值。
总体节奏
- 快手每轮面试节奏还是比较快的,可以很快进入下一轮
- 每一轮都有相对应的算法题目,但都属于基本题目
- 面对算法题目不要胆怯,提前刷题150道之后,一般不会有问题
一面-最长上升子序列长度
给定一个无序的整数数组,找到其中最长上升子序列的长度。
示例:
输入: [10,9,2,3,7,101,99,100]
输出: 4
解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。
// 元素之间连续;元素之间不连续,则可以使用dp解答
public static void main(String[] args) {
int[] temp = new int[]{10,9,2,3,7,12,99,100};
int max = 0;
for(int x= 0;x < temp.length-1;x++){
int result = 1;
for(int y = x+1;y < temp.length;y++){
if(temp[y] > temp[y-1]){
result++;
}else{
result=0;
}
}
if(result > max){
max = result;
}
}
System.out.println(max);
}
二面-反转链表
要求将链表反转,给出节点的头节点,要求返回反转后的链表.Leetcode题目地址
ListNode结构如下:
class ListNode {
int val;
ListNode next;
ListNode() {
}
ListNode(int val) {
this.val = val;
}
ListNode(int val, ListNode next) {
this.val = val;
this.next = next;
}
}
反转代码如下:
// 主要是利用中间变量来实现反转
public ListNode reverseList(ListNode head) {
ListNode prev = null;
ListNode curr = head;
while (curr != null) {
ListNode next = curr.next;
// 改变指向
curr.next = prev;
// 这两行,可以当作是向前挪动
prev = curr;
curr = next;
}
return prev;
}
三面-出现一次的元素
题目大意: 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
leetcode题目地址
最原始的办法
public int singleNumber(int[] nums) {
int res = 0;
Set<Integer> set = new HashSet<>();
for (int x : nums) {
if (set.contains(x)) {
set.remove(x);
} else {
set.add(x);
}
}
res = set.stream().findFirst().get();
return res;
}
位运算
public int singleNumber(int[] nums) {
int single = 0;
for (int num : nums) {
single ^= num;
}
return single;
}
以上是关于2021年快手电商后端面试-算法题目分析的主要内容,如果未能解决你的问题,请参考以下文章
2021年最新最全:30W字!千道Java 后端面试大全(值得收藏)