面试必学!!
Posted @了凡
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试必学!!相关的知识,希望对你有一定的参考价值。
前言
壁纸推荐
图片著作小圣anx:https://bcy.net/item/detail/6885930410862189571?_source_page=cos
博主简介
博主介绍:
– 本人是了凡,意义是希望本人任何时候以善良为先,以人品为重,喜欢了凡四训中的立命之学、改过之法、积善之方、谦德之效四训,更喜欢每日在简书上投稿日更的读书感悟笔名:三月_刘超。专注于 Go Web 后端,辅学Python、Java、算法、前端等领域。未来大家一起加油啊~
题目A:简单
题目:移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
示例 1:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
题解:
思路:双指针解法
public class A{
public void moveZeroes(int[] nums) {
int l = 0, r = 0;
while (r < nums.length) {
if (nums[r] != 0) {
int t = nums[l];
nums[l] = nums[r];
nums[r] = t;
l++;
}
r++;
}
}
}
题目B:中等
题目:盛最多水的容器
给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
说明:你不能倾斜容器。
示例:
示例 1:
输入:[1,8,6,2,5,4,8,3,7]
输出:49
解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。
示例 2:
输入:height = [1,1]
输出:1
示例 3:
输入:height = [4,3,2,1,4]
输出:16
示例 4:
输入:height = [1,2,1]
输出:2
题解:
思路:双指针写法
class B{
public int maxArea(int[] height) {
int max = 0;
for(int i = 0, j = height.length - 1; i < j;){
int minHeight = height[i] < height[j] ? height[i ++] : height[j --];
int are = (j - i + 1) * minHeight;
max = Math.max(max, are);
}
return max;
}
}
题目C:困难
题目:柱状图中最大的矩形
给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。
求在该柱状图中,能够勾勒出来的矩形的最大面积。
示例:
示例 1:
输入: [2,1,5,6,2,3]
输出: 10
题解:
class Solution {
public int largestRectangleArea(int[] heights) {
int n = heights.length;
int[] left = new int[n];
int[] right = new int[n];
Stack<Integer> mono_stack = new Stack<Integer>();
for (int i = 0; i < n; ++i) {
while (!mono_stack.isEmpty() && heights[mono_stack.peek()] >= heights[i]) {
mono_stack.pop();
}
left[i] = (mono_stack.isEmpty() ? -1 : mono_stack.peek());
mono_stack.push(i);
}
mono_stack.clear();
for (int i = n - 1; i >= 0; --i) {
while (!mono_stack.isEmpty() && heights[mono_stack.peek()] >= heights[i]) {
mono_stack.pop();
}
right[i] = (mono_stack.isEmpty() ? n : mono_stack.peek());
mono_stack.push(i);
}
int ans = 0;
for (int i = 0; i < n; ++i) {
ans = Math.max(ans, (right[i] - left[i] - 1) * heights[i]);
}
return ans;
}
后序每周持续更新!
以上是关于面试必学!!的主要内容,如果未能解决你的问题,请参考以下文章
Python 电路绘制库 schemdraw 你会吗?面试必学