面试经典150题(85-87)

leetcode 150道题 计划花两个月时候刷完,今天(第四十三天)完成了3道(85-87)150:

85.(77. 组合)题目描述:

给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。
你可以按 任何顺序 返回答案。
输入:n = 4, k = 2
输出:
[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4],]

第一版(昨天就是这个卡了好久没弄出来,今天还是没思路啊。。看了解题,感觉都是一个for 然后for里面嵌套。看看解题的代码吧)

class Solution {List<List<Integer>> res=new ArrayList();public List<List<Integer>> combine(int n, int k) {if(n<k){return res;}selectKNum(n,k,1,new ArrayList<Integer>());return res;}public void selectKNum(int n, int k,int start,List<Integer> list) {if(list.size()==k){res.add(new ArrayList(list));return ;}for(int i=start;i<=n;i++){list.add(i);selectKNum(n,k,i+1,list);list.remove(list.size()-1);}}
}

86.(46. 全排列)题目描述:

给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
输入:nums = [1,2,3]
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

第一版(还是解题,感觉这个又是另一种回溯的题型)

class Solution {List<List<Integer>> res=new ArrayList();public List<List<Integer>> permute(int[] nums) {boolean[] used = new boolean[nums.length];permuteCore(nums,used,new ArrayList<Integer>());return res;}public void permuteCore(int[] nums,boolean[] used,List<Integer> list){if(list.size()==nums.length){res.add(new ArrayList(list));return ;}for(int i=0;i<nums.length;i++){if(used[i]){continue;}list.add(nums[i]);used[i]=true;permuteCore(nums,used,list);used[i]=false;list.remove(list.size()-1);}}
}

87.(39. 组合总和)题目描述:

给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。
candidates 中的 同一个 数字可以 无限制重复被选取 。如果至少一个数字的被选数量不同,则两种组合是不同的。 
对于给定的输入,保证和为 target 的不同组合数少于 150 个。
candidates 全是大于0的整数
输入:candidates = [2,3,6,7], target = 7
输出:[[2,2,3],[7]]

第一版(根据之前的两个题的解题,照猫画虎写了一版。。终于自己写了一版了,虽然性能不是很好)

class Solution {List<List<Integer>> res=new ArrayList();Set<String> set=new HashSet();public List<List<Integer>> combinationSum(int[] candidates, int target) {combinationSumCore(candidates,target,new ArrayList<Integer>());return res;}public void combinationSumCore(int[] candidates,int target,List<Integer> list){if(0==target){List<Integer> temp=new ArrayList(list);temp.sort((i1,i2)->{return i1-i2;});if(set.add(temp.toString())){res.add(temp);}return ;}for(int i=0;i<candidates.length;i++){if(target<0){break;}if(target-candidates[i]<0){continue;}list.add(candidates[i]);combinationSumCore(candidates,target-candidates[i],list);list.remove(list.size()-1);}}
}

第二版(看了解题,讲的还是理解不了,就照着写了一版,真的是性能从 104ms->5ms 质的飞跃)

class Solution {List<List<Integer>> res=new ArrayList();Set<String> set=new HashSet();public List<List<Integer>> combinationSum(int[] candidates, int target) {combinationSumCore(candidates,0,target,new ArrayList<Integer>());return res;}public void combinationSumCore(int[] candidates,int start,int target,List<Integer> list){if(0==target){res.add(new ArrayList(list));return ;}for(int i=start;i<candidates.length;i++){if(target<0){break;}if(target-candidates[i]<0){continue;}list.add(candidates[i]);combinationSumCore(candidates,i,target-candidates[i],list);list.remove(list.size()-1);}}
}

就这两天回溯我感觉咋都是 for 加递归调用。。但是不好理解。。不行就背下来(笨人做法)

加油,第四十三天了,早日跳槽啊!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/637770.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity中URP下的SimpleLit的 Lambert漫反射计算

文章目录 前言一、Lambert漫反射计算11、MixRealtimeAndBakedGI 函数有三个重载2、3号 调用了 2号3、1号调用了 SubtractDirectMainLightFromLightmap函数4、我们重点来看 Lambert漫反射的实现部分5、其余部分 二、Lambert漫反射计算21、LightingLambert 前言 在之前的文章中&…

Python学习之路-Python操作redis

Python学习之路-Python操作redis 前言 在Python中操作Redis可以直接用redis模块 安装 安装Redis的有3种方式https://github.com/andymccurdy/redis-py 第一种&#xff1a;进⼊虚拟环境py_django&#xff0c;联⽹安装包redis pip install redis第二种&#xff1a;进⼊虚拟环…

【VRTK】【Unity】【PICO】PICO项目打包后闪退的根本原因

【背景】 一开始打包运行好好的PICO项目&#xff0c;中途用Preview模式开发了一阵后&#xff0c;再次打包就闪退了。 【分析】 项目设置没有动过&#xff0c;那么可能是Preview开发过程中引入的包导致的问题。 【答案】 千万不要在PICO项目中导入Oculus包。我原本想用一些…

Python小项目:还在为备份烦恼?这个tkinter项目帮你解决!

文章目录 1 引言2 Tkinter概览3 设计备份软件的界面4 文件夹选择逻辑5 备份方案介绍5.1 完全备份5.2 增量备份5.3 镜像备份 完整代码&#xff1a; import tkinter as tk from tkinter import filedialog, messagebox import os import shutil import filecmpdef choose_source(…

MySQL自增主键为何不连续

自增值的存储原理 MyISAM引擎的自增值保存在数据文件中InnoDB引擎的自增值&#xff0c;保存在内存里 MySQL 8.0版本后&#xff0c;才有了“自增值持久化”的能力&#xff0c;实现了“如果发生重启&#xff0c;表的自增值可以恢复为MySQL重启前的值”&#xff0c;具体情况是&am…

Kotlin 解构声明

在一些像 Python 的高级语言中&#xff0c;支持 多返回值的&#xff0c;例如 x, y get_position() 这样操作接收。 而在 Kotlin 中&#xff0c;虽然不支持 多返回值&#xff0c;但有类似的 解构&#xff08;destructure&#xff09; 对象功能&#xff0c;叫做 解构声明。 用…

理解pytorch系列:contiguous是怎么实现的

在PyTorch中&#xff0c;.contiguous()方法的作用是确保张量在内存中是连续存储的。当你对张量执行某些操作&#xff0c;如transpose()、permute()、narrow()、expand()等之后&#xff0c;得到的张量可能不再在内存中连续排列。这些操作通常返回一个张量的视图&#xff0c;它们…

SpringBoot 3.1.7 集成Sentinel

一、背景 我的项目需要引入限流&#xff0c;降级&#xff0c;熔断框架&#xff0c;由于 Spring Cloud 2022.0.4 已经不再支持 Hystrix&#xff0c;Spring Cloud 提供了替代方案&#xff0c;如 Resilience4j&#xff0c;可以使用它来替换 Hystrix。但是网上搜了一下国内Resilie…

Zephyr 学习笔记(一)

概述 Zephyr OS 是一个占用空间小的内核&#xff0c;用于资源受限的嵌入式系统&#xff1a;从简单的嵌入式环境传感器、LED 可穿戴设备到复杂的嵌入式控制器、智能手表和物联网无线应用。 Zephyr 内核支持多种架构&#xff0c;包括&#xff1a; ARCv2 (EM and HS) and ARCv3…

Python进阶(一)名字空间 | 超详细名字空间解析 内置 全局 局部 调试查看

文章目录 1 内置名字空间2 全局名字空间3 局部名字空间4 类名字空间5 调试查看名字空间5.1 查看局部名字空间5.2 查看全局名字空间 在Python中&#xff0c;名字空间&#xff08;Namespace&#xff09;是一个用于存储变量名称和它们对应的对象值的容器。名字空间可以看作是一个映…

2024年华为OD机试真题-密码输入检测-Python-OD统一考试(C卷)

题目描述: 给定用户密码输入流input,输入流中字符<表示退格,可以清除前一个输入的字符,请你编写程序,输出最终得到的密码字符,并判断密码是否满足如下的密码安全要求。 密码安全要求如下: 1.密码长度>=8; 2.密码至少需要包含1个大写字母; 3.密码至少需要包含1个小…

burp靶场--文件上传

burp靶场–文件上传 https://portswigger.net/web-security/file-upload/lab-file-upload-remote-code-execution-via-web-shell-upload 1.文件上传 1、原理&#xff1a;文件上传漏洞是指Web服务器允许用户将文件上传到其文件系统&#xff0c;而不充分验证文件的名称、类型、…

Midjourney基本使用(极速版)

加入Midjourney社区 首先&#xff0c;我们来创建与Midjourney交互的环境 因为需要利用discord与Midjourney进行交互 因为Midjourney没有自己的网站没有自己的服务器 完全依赖discord作为Midjourney的前端&#xff0c;通过discord&#xff0c;用户才能方便快捷的与Midjourney进行…

《WebKit 技术内幕》之七(2): 渲染基础

2 网页层次和RenderLayer树 2.1 层次和RenderLayer对象 前面章节介绍了网页的层次结构&#xff0c;也就是说网页是可以分层的&#xff0c;这有两点原因&#xff0c;一是为了方便网页开发者开发网页并设置网页的层次&#xff0c;二是为了WebKit处理上的便利&#xff0c;也就是…

Circles of Waiting洛谷黑题题解

Circles of Waiting 题面翻译 在平面直角坐标系上&#xff0c;有一个神奇的点&#xff0c;一开始在 ( 0 , 0 ) (0, 0) (0,0) 。每秒钟这个点都会随机移动&#xff1a;如果它在 ( x , y ) (x, y) (x,y) &#xff0c;下一秒它在 ( x − 1 , y ) (x - 1, y) (x−1,y) 的概率是…

在WIN从零开始在QMUE上添加一块自己的开发板(二)

文章目录 一、前言往期回顾 二、CPU虚拟化&#xff08;一&#xff09;相关源码&#xff08;二&#xff09;举个例子&#xff08;三&#xff09;测试 三、内存虚拟化&#xff08;一&#xff09;相关源码&#xff08;二&#xff09;举个例子测试 参考资料 一、前言 笔者这篇博客…

力扣日记1.21-【回溯算法篇】77. 组合

力扣日记&#xff1a;【回溯算法篇】77. 组合 日期&#xff1a;2023.1.21 参考&#xff1a;代码随想录、力扣 终于结束二叉树了&#xff01;听说回溯篇也是个大头&#xff0c;不知道这一篇得持续多久了…… 77. 组合 题目描述 难度&#xff1a;中等 给定两个整数 n 和 k&#…

LSTM时间序列预测

本文借鉴了数学建模清风老师的课件与思路&#xff0c;可以点击查看链接查看清风老师视频讲解&#xff1a;【1】演示&#xff1a;基于LSTM深度学习网络预测时间序列&#xff08;MATLAB工具箱&#xff09;_哔哩哔哩_bilibili % Forecast of time series based on LSTM deep learn…

敏捷测试和DevOpes自动化测试的区别

敏捷测试和DevOps自动化测试在以下方面存在区别&#x1f447; 1️⃣目标 &#x1f388;敏捷测试的主要目标是提供快速的反馈和持续的改进&#xff0c;以便在开发过程中尽早发现和解决问题&#xff0c;从而提高软件的质量和可靠性。 &#x1f308;DevOps自动化测试的目标是提高软…

Java学习笔记(七)——操作数组工具类Arrays

文章目录 ArraysArrays.toString()Arrays.binarySearch()Arrays.copyOf()Arrays.copyOfRange()Arrays.fill()Arrays.sort()升序排序降序排序 Arrays 操作数组的工具类。 Arrays.toString() import java.util.Arrays;public class test40 {public static void main(String[] a…