濮阳网站设计公司,网站建设与管理ppt模板下载,全球排名前十网站,成都网站建设科【LeetCode】挑战100天 Day16#xff08;热题面试经典150题#xff09; 一、LeetCode介绍二、LeetCode 热题 HOT 100-182.1 题目2.2 题解 三、面试经典 150 题-183.1 题目3.2 题解 一、LeetCode介绍 LeetCode是一个在线编程网站#xff0c;提供各种算法和数据结构的题目热题面试经典150题 一、LeetCode介绍二、LeetCode 热题 HOT 100-182.1 题目2.2 题解 三、面试经典 150 题-183.1 题目3.2 题解 一、LeetCode介绍 LeetCode是一个在线编程网站提供各种算法和数据结构的题目面向程序员、计算机科学专业学生和技术爱好者等人群旨在帮助他们提高算法和编程技能。LeetCode上的问题通常来自各种技术公司的面试题目因此它也是程序员面试准备的重要资源之一。
LeetCode上的问题涵盖了各种难度级别从入门级到专家级都有不同难度的题目可供练习。用户可以选择使用不同的编程语言提交答案LeetCode能够对结果进行评估并返回测试结果。
除了题目外LeetCode还提供了讨论区、排行榜等社区功能用户可以在这里交流学习心得、解决疑难问题并与其他用户比较自己的做题成绩。
挑战100天 AI In LeetCode是基于LeetCode题库借助AI的能力进行解题、并学习其解题过程。
二、LeetCode 热题 HOT 100-18
2.1 题目
四数之和
给你一个由 n 个整数组成的数组 nums 和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] 若两个四元组元素一一对应则认为两个四元组重复0 a, b, c, d n
a、b、c 和 d 互不相同
nums[a] nums[b] nums[c] nums[d] target
你可以按 任意顺序 返回答案 。示例 1输入nums [1,0,-1,0,-2,2], target 0
输出[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]
示例 2输入nums [2,2,2,2,2], target 8
输出[[2,2,2,2]]提示1 nums.length 20^0
-109 nums[i] 10^9
-109 target 10^92.2 题解
解题思路
当处理大整数时为了避免溢出问题我们需要在计算四数之和的过程中使用长整型来存储计算结果。具体地在双指针移动的过程中将四个数的和存储为长整型即(long)nums[i] nums[j] nums[left] nums[right]。
另外本题的解题思路基于三数之和的解法进行延伸利用双指针法来解决四数之和的问题。首先将数组从小到大排序然后枚举前两个数nums[i]和nums[j]在剩下的元素中使用双指针找到符合条件的另外两个数。
在双指针移动的过程中需要注意去重。为了避免重复当nums[i]、nums[j]、nums[left]和nums[right]组成的四元组符合条件时我们应该分别将left和right移动到下一个不同的位置而不是直接跳过这个四元组。
class Solution {public ListListInteger fourSum(int[] nums, int target) {ListListInteger ans new ArrayList();if (nums null || nums.length 4) return ans;Arrays.sort(nums);int n nums.length;for (int i 0; i n - 3; i) {if (i 0 nums[i] nums[i-1]) continue;for (int j i 1; j n - 2; j) {if (j i 1 nums[j] nums[j-1]) continue;int left j 1, right n - 1;while (left right) {long sum (long)nums[i] nums[j] nums[left] nums[right];if (sum target) {ans.add(Arrays.asList(nums[i], nums[j], nums[left], nums[right]));left;right--;while (left right nums[left] nums[left - 1]) left;while (left right nums[right] nums[right 1]) right--;} else if (sum target) {left;} else {right--;}}}}return ans;}
}三、面试经典 150 题-18 数组 / 字符串 3.1 题目
最后一个单词的长度
给你一个字符串 s由若干单词组成单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。示例 1输入s Hello World
输出5
解释最后一个单词是“World”长度为5。
示例 2输入s fly me to the moon
输出4
解释最后一个单词是“moon”长度为4。
示例 3输入s luffy is still joyboy
输出6
解释最后一个单词是长度为6的“joyboy”。提示1 s.length 104
s 仅有英文字母和空格 组成
s 中至少存在一个单词3.2 题解
解题思路
首先我们需要去除字符串末尾可能存在的空格字符以防止最后一个单词被漏掉。然后从字符串末尾开始向前遍历找到最后一个非空格字符的位置即最后一个单词的结尾位置。记为end。再次从end位置向前遍历找到最后一个空格字符的位置即最后一个单词的起始位置。记为start。最后一个单词的长度即为end - start。
class Solution {public int lengthOfLastWord(String s) {// 去除字符串末尾的空格字符String trimmedStr s.trim();int end trimmedStr.length() - 1;int start end;while (start 0 trimmedStr.charAt(start) ! ) {start--;}return end - start;}
} 至此挑战100天 AI In LeetCode Day16热题面试经典150题完成后续会持续调整查阅过程中若遇到问题欢迎留言或私信交流。