⚡每日算法&面试题⚡一起肥学6️⃣
Posted 肥学
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了⚡每日算法&面试题⚡一起肥学6️⃣相关的知识,希望对你有一定的参考价值。
⚽算法题
给定一个无重复元素的正整数数组 candidates 和一个正整数 target ,找出 candidates 中所有可以使数字和为目标数
target 的唯一组合。candidates 中的数字可以无限制重复被选取。如果至少一个所选数字数量不同,则两种组合是唯一的。
对于给定的输入,保证和为 target 的唯一组合数少于 150 个。
示例 1:
输入: candidates = [2,3,6,7], target = 7
输出: [[7],[2,2,3]]
示例 2:
输入: candidates = [2,3,5], target = 8
输出: [[2,2,2,2],[2,3,3],[3,5]]
示例 3:
输入: candidates = [2], target = 1
输出: []
示例 4:
输入: candidates = [1], target = 1
输出: [[1]]
示例 5:
输入: candidates = [1], target = 2
输出: [[1,1]]
提示:
1 <= candidates.length <= 30
1 <= candidates[i] <= 200
candidate 中的每个元素都是独一无二的。
1 <= target <= 500
⚽一点点思路
此题总感觉似曾相识的感觉,你们呢?看了一下有一个简单的思路,它不就要得到与target值相同的数列的和嘛,我就以两数相加和target比较呗小了向前找更大的数相加,不行就三个数相加。说白了就是递归嘛。好了有想法了我们就动手。
⚽源码和题解
具体实现呢这次开始来点硬货了,关于数据结构我们之前只说过链表还有栈。今天我们参与进来了二叉树中的深度优先遍历这是搜索里面的精髓。不怎么会的同学可以留言或者私信我给你们找资源讲解。
class Solution {
public List<List<Integer>> combinationSum(int[] candidates, int target) {
List<List<Integer>> ans = new ArrayList<List<Integer>>();
List<Integer> combine = new ArrayList<Integer>();
dfs(candidates, target, ans, combine, 0);
return ans;
}
//下面使用深度优先的方法来搜索符合的数字组合target2是用来记录还剩下多少到达
//target的,arr是用来存放结果的,combine是存放正在组合中的数组的
//temp是一个指针来记录位置的
public void dfs(int[] candidates, int target2, List<List<Integer>> arr, List<Integer> combine, int temp) {
//多次强调递归一定要清楚它的结束条件,下面是两个条件不清楚可以问我
if (temp == candidates.length) {
return;
}
if (target2 == 0) {
arr.add(new ArrayList<Integer>(combine));
return;
}
// 直接跳过相当于移动了temp来进行下一位置的搜索
dfs(candidates, target2, arr, combine, temp + 1);
// 选择当前数
if (target2 - candidates[temp] >= 0) {
combine.add(candidates[temp]);
dfs(candidates, target2 - candidates[temp], arr, combine, temp);
combine.remove(combine.size() - 1);
}
}
}
⚽面试题
为什么kafka效率这么高?
kafka的IO效率这么高的原因:
(1)第一个是在写入数据的时候第一个就是因为kafka是顺序写入数据的,把普通的那种随机IO变成了顺序IO,这样的话写入数据的速度就比较快(2)第二个就是kafka读取数据的时候是基于sendfile实现Zero Copy
传统的数据读取的流程是: 基于sendfile实现Zero Copy调用read函数,文件数据被copy到内核缓冲区
read函数返回,文件数据从内核缓冲区copy到用户缓冲区
write函数调用,将文件数据从用户缓冲区copy到内核与socket相关的缓冲区。 数据从socket缓冲区copy到相关协议引擎。但是kafka的读取时这样的: sendfile系统调用,文件数据被copy至内核缓冲区
再从内核缓冲区copy至内核中socket相关的缓冲区 最后再socket相关的缓冲区copy到协议引擎
(3)第二个就是kafka的数据压缩,Kafka使用了批量压缩,即将多个消息一起压缩而不是单个消息压缩
(4)第三个就是kafka的生产者在进行生产消息的时候,采用的是批量发送和双线程,其实就是使用了双线程,主线程和Sender线程
特别介绍
📣小白练手专栏,适合刚入手的新人欢迎订阅编程小白进阶
📣python有趣练手项目里面包括了像《机器人尬聊》《恶搞程序》这样的有趣文章,可以让你快乐学python练手项目专栏
📣另外想学JavaWeb进厂的同学可以看看这个专栏:传送们
📣这是个面试和考研的算法练习我们一起加油上岸之路
资料领取处
以上是关于⚡每日算法&面试题⚡一起肥学6️⃣的主要内容,如果未能解决你的问题,请参考以下文章
⚡每日算法&面试题⚡一起肥学1️⃣1️⃣(面试linux命令)