LeetCode刷题笔记之hot 100(二)

1. 322【零钱兑换】- 动态规划

  • 题目: 给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。你可以认为每种硬币的数量是无限的。
  • 代码:
class Solution {public int coinChange(int[] coins, int amount) {//amount相当于书包的总容量,coins相当于每块石头//bp表示凑成总金额所需的最少的硬币个数//dp[j] = min(dp[j],dp[j-coins[i]]+1)//dp[0]=0,dp[]=amount+1if(amount==0) return 0;int[] dp = new int[amount+1];Arrays.fill(dp,amount+1);dp[0] = 0;for(int i=0;i<coins.length;i++){for(int j=1;j<=amount;j++){if(coins[i]<=j){dp[j] = Math.min(dp[j],dp[j-coins[i]]+1);}}}return dp[amount]>amount?-1:dp[amount];}
}

2. 33【搜索旋转排序数组】- 二分查找

  • 题目: 整数数组 nums 按升序排列,数组中的值 互不相同 。
    在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。
    给你 旋转后 的数组 nums 和一个整数 target ,如果 nums 中存在这个目标值 target ,则返回它的下标,否则返回 -1 。
    你必须设计一个时间复杂度为 O(log n) 的算法解决此问题。
  • 代码:
class Solution {public int search(int[] nums, int target) {//二分查找if(nums.length == 1) return nums[0]==target?0:-1;int left = 0;int right = nums.length-1;while(left<=right){int mid = left+(right-left)/2;if(nums[mid] == target) return mid;//[0,mid]是递增的if(nums[0]<=nums[mid]){if(nums[mid]>target && nums[0]<=target){right = mid - 1;}else{left = mid + 1;}}else{//[mid,len]是递增的if(nums[mid]<target && nums[nums.length-1]>=target){left = mid+1;}else{right = mid-1;}}}return -1;}
}

3. 215【数组中的第k个最大元素】- 优先级队列

  • 题目: 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。
  • 代码:
class Solution {public int findKthLargest(int[] nums, int k) {//使用优先级队列,使用大根堆排序,返回第k个元素PriorityQueue<Integer> heap = new PriorityQueue<>(new Comparator<Integer>(){public int compare(Integer a,Integer b){return b-a;}});for(int i=0;i<nums.length;i++){heap.offer(nums[i]);}int ans=0;for(int i=0;i<k;i++){ans = heap.poll();}return ans;}
}

4. 46【全排列】- 回溯算法

  • 题目: 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
  • 代码:
class Solution {List<List<Integer>> ans = new ArrayList<>();List<Integer> path = new LinkedList<>();public List<List<Integer>> permute(int[] nums) {//典型的回溯算法boolean[] isUsed = new boolean[nums.length];Arrays.fill(isUsed,false);backtrack(nums,isUsed);return ans;}public void backtrack(int[] nums,boolean[] isUsed){if(path.size() >= nums.length){ans.add(new ArrayList<>(path));return;}for(int i=0;i<nums.length;i++){if(isUsed[i]) continue;path.add(nums[i]);isUsed[i] = true;backtrack(nums,isUsed);path.removeLast();isUsed[i] = false;}}
}

5. 55【跳跃游戏】- 贪心算法

  • 题目: 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。
    判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。
  • 代码:
class Solution {public boolean canJump(int[] nums) {//每次跳跃选择最大跳跃范围,遍历这个范围内的每一个位置//重复上述操作,检查是否能够到达最后一个位置if(nums.length == 1) return true;int loc = nums[0];for(int i=0;i<=loc;i++){if(nums[i]+i > loc){loc = nums[i]+i;}if(loc>=nums.length-1){return true;}}return false;}
}

6. 5【最长回文子串】- 动态规划

  • 题目: 给你一个字符串 s,找到 s 中最长的回文子串。如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
  • 代码:
class Solution {public String longestPalindrome(String s) {//dp[i][j]表示substring(i,j+1)是否是回文串//dp[i][j] = true(s[i]==s[j]) or false(s[i]!=s[j])//dp[i][j] = true(s[i]==s[j] and j-i<=1 or dp[i+1][j-1])if(s.length()==1) return s;int n = s.length();boolean[][] dp = new boolean[n][n];int index = 0;int len = 0;for(int i=n-1;i>=0;i--){for(int j=0;j<n;j++){if(s.charAt(i) == s.charAt(j)){if(j-i<=1){dp[i][j] = true;}else if(dp[i+1][j-1]){dp[i][j] = true;}if(dp[i][j] && len < j-i+1){index = i;len = j-i+1;}}else{dp[i][j] = false;}}} return s.substring(index,index+len);}
}

7. 22【括号生成】- 回溯算法

  • 题目: 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
  • 代码:
class Solution {List<String> ans = new ArrayList<>();StringBuilder sb = new StringBuilder();public List<String> generateParenthesis(int n) {//回溯法:左右括号的个数<=n,且右括号个数<左括号//当字符串的长度==2*n是终止backtrack(0,0,n);return ans;}public void backtrack(int left,int right,int n){if(sb.length() == 2*n){ans.add(sb.toString());return;}if(left < n){sb.append('(');backtrack(left+1,right,n);sb.deleteCharAt(sb.length()-1);}if(right<left){sb.append(')');backtrack(left,right+1,n);sb.deleteCharAt(sb.length()-1);}}
}

8. 39【组合总和】- 回溯算法

  • 题目: 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。
    candidates 中的 同一个 数字可以 无限制重复被选取 。如果至少一个数字的被选数量不同,则两种组合是不同的。
    对于给定的输入,保证和为 target 的不同组合数少于 150 个。
  • 代码:
class Solution {List<List<Integer>> ans = new ArrayList<>();List<Integer> path = new LinkedList<>();public List<List<Integer>> combinationSum(int[] candidates, int target) {//回溯算法backtrack(candidates,target,0,0);return ans;}public void backtrack(int[] candidates, int target,int index,int sum){if(index>=candidates.length||sum>target)return;if(sum == target){ans.add(new ArrayList(path));return;}for(int i=index;i<candidates.length;i++){path.add(candidates[i]);sum += candidates[i];backtrack(candidates,target,i,sum);path.removeLast();sum -= candidates[i];}}
}

9. 48【旋转图像】- 数组/双指针

  • 题目: 给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。
    你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。
  • 代码:
class Solution {public void rotate(int[][] matrix) {//第i行变成第n-i-1列,第j列变成第j行//首先,按行对数组进行反转//然后,以对角线为轴交换两边元素int n = matrix.length;int left = 0;int right = n-1;int tmp;while(left<right){for(int j=0;j<n;j++){tmp = matrix[left][j];matrix[left][j] = matrix[right][j];matrix[right][j] = tmp;}left++;right--;}for(int i=0;i<n;i++){for(int j=0;j<i;j++){tmp = matrix[i][j];matrix[i][j] = matrix[j][i];matrix[j][i] = tmp;}}}
}

10. 53【最大子数组和】- 动态规划

  • 题目: 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
    子数组是数组中的一个连续部分。
  • 代码:
class Solution {public int maxSubArray(int[] nums) {//dp[i]表示以nums[i]为结尾的最大子数组和//dp[i] = Math.max(dp[i-1]+nums[i],nums[i])//dp[0] = nums[0]int n = nums.length;int[] dp = new int[n];dp[0] = nums[0];int max = nums[0];for(int i=1;i<n;i++){dp[i] = Math.max(dp[i-1]+nums[i],nums[i]);max = Math.max(dp[i],max);}return max;}
}

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

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

相关文章

关于视场角,你需要知道这些!

视场角在光学工程中又称视场&#xff0c;视场角的大小决定了光学仪器的视野范围。视场角又可用FOV&#xff08;Field of view&#xff09;表示&#xff0c;其与焦距的关系如下&#xff1a;像高 EFL*tan (半FOV)&#xff1b;EFL为焦距&#xff1b;FOV为视场角。即以入瞳位置为顶…

一个包一条命令,我实现了对整个前端项目代码的校验

在现代前端开发中&#xff0c;代码校验与风格统一不仅是良好编程习惯的体现&#xff0c;更是提升项目质量、保障代码可维护性与减少潜在bug的关键环节。然而&#xff0c;面对诸如ESLint、Commitlint、Stylelint等多样化的校验工具&#xff0c;以及针对React、Vue等不同前端框架…

笔记本电脑上部署LLaMA-2中文模型

尝试在macbook上部署LLaMA-2的中文模型的详细过程。 &#xff08;1&#xff09;环境准备 MacBook Pro(M2 Max/32G); VMware Fusion Player 版本 13.5.1 (23298085); Ubuntu 22.04.2 LTS; 给linux虚拟机分配8*core CPU 16G RAM。 我这里用的是16bit的量化模型&#xff0c;…

java线程(一)--进程,多线程,synchronized和lock锁,JUC,JUnit

Java线程入门 单核CPU和多核CPU的理解 单核CPU&#xff0c;其实是一种假的多线程&#xff0c;因为在一个时间单元内&#xff0c;也只能执行一个线程的任务。例如&#xff1a;虽然有多车道&#xff0c;但是收费站只有一个工作人员在收费&#xff0c;只有收了费才能通过&#xf…

LeetCode226:反转二叉树

题目描述 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 解题思想 使用前序遍历和后序遍历比较方便 代码 class Solution { public:TreeNode* invertTree(TreeNode* root) {if (root nullptr) return root;swap(root->left, root…

nginx 常用功能

添加白名单配置 if ($clientRealIp ~ "192.157.34.245|17.213.126.21") {rewrite ^.*$ /403.html last;break; } 添加站点配置信息 nginx.conf 文件最后一行添加 并新建vhost 目录 include /usr/local/nginx/conf/vhost/*.conf;include vhost/*.conf;

什么是ISP住宅IP?相比于普通IP它的优势是什么?

什么是ISP住宅IP&#xff1f; ISP住宅IP是指由互联网服务提供商&#xff08;ISP&#xff09;分配给住宅用户的IP地址。它是用户在家庭网络环境中连接互联网的标识符&#xff0c;通常用于上网浏览、数据传输等活动。ISP住宅IP可以是动态分配的&#xff0c;即每次连接时都可能会…

【DevOps工具篇】 OpenLDAP的LDAP服务器(slapd)是什么?

目录 OpenLAP的LDAP服务器(slapd)是什么基本功能安全性管理性可靠性和可扩展性调优OpenLDAP的服务器基本功能简单身份验证和SASL身份验证LDAP模式OpenLDAP服务器管理LDAP服务器配置LDAP数据备份和还原slapcatslapaddslapindex

C++类复习

C类 1. 类内成员函数隐式声明为inline class Str {int x;int y 3; public:inline void fun(){std::cout<<"pf,yes!"<<std::endl;} };这段代码不会报错&#xff0c;但是类内的成员函数隐式声明为inline函数&#xff0c;不需要单独写在前面。因此将成员…

BOM系统:贯穿制造全程的管理利器

在制造行业中&#xff0c;BOM系统的应用已经成为提高生产效率、降低成本和确保产品质量的关键因素。BOM系统作为产品结构和物料清单的管理工具&#xff0c;为制造企业提供了全面的控制和协同能力。 1.产品设计与开发&#xff1a;在产品设计阶段&#xff0c;BOM系统为工程师提供…

基于自动编码器的预训练模型方法模型预训练方法RetroMAE和RetroMAE-2

文章目录 RetroMAERetroMAE详情编码解码增强解码 RetroMAE-2RetroMAE-2详情编码[CLS]解码OT解码和训练目标向量表征 总结参考资料 RetroMAE RetroMAE 出自论文《RetroMAE: Pre-Training Retrieval-oriented Language Models Via Masked Auto-Encoder》&#xff0c;是一种针对于…

ES-7.12-官方文档阅读-ILM-Automate rollover

教程&#xff1a;使用ILM自动化滚动创建index 当你持续将带有时间戳的文档index到Elasticsearch当中时&#xff0c;通常会使用数据流&#xff08;data streams&#xff09;以便可以定义滚到到新索引。这是你能够实施一个hot-warm-cold架构来满足你的性能要强&#xff0c;控制随…

OpenHarmony实战:RK3568 开发板镜像烧录指南

前言 烧录开发板是每个开发者的必修课&#xff0c;每次对系统的修改务必进行烧录测试&#xff0c;确保修改正确和不会引入新问题。 本文基于 Windows10&#xff0c;以 RK3568 开发板为例&#xff0c;指导如何烧录 OpenHarmony 镜像&#xff0c;镜像也叫固件。Hihoop&#xff…

Oracle利用BBED恢复崩溃实例(ORA-01092,ORA-00704,ORA-01578)

BBED修复数据损坏引起的数据库崩溃&#xff08;ORA-01092,ORA-00704,ORA-01578&#xff09;(2021年某苏州国企的案例&#xff09; 1.Symptom 用户一个边缘系统出现数据文件损坏&#xff0c;且没有备份&#xff0c;数据库无法启动 报错如下&#xff0c;发现是oracle bootstra…

【Vue3进阶】- 第2学堂小商城实战课程前言

该教程为进阶教程&#xff0c;如果你还不了解Vue3的基础知识&#xff0c;可以先前往Vue3基础教程&#xff0c;从入门到实战。 学习时遇到的任何疑问都欢迎在相应课文页面下方的问答区进行提问哦 我能学到什么&#xff1f; 编程写法千千万&#xff0c;实现需求是第一。 教程中…

Docker容器、Serverless与微服务:腾讯云云原生架构技术实践案例集解析

前言 随着云原生技术的飞速发展&#xff0c;容器化和函数计算正成为企业和开发者关注的焦点。在这一潮流中&#xff0c;腾讯云凭借其卓越的技术实力和深厚的行业积累&#xff0c;发布了《2023腾讯云容器和函数计算技术实践精选集》&#xff0c;为我们提供了一份深入探索云原生…

C# 异步问答集

问&#xff1a;调用方法(callingmethod):该方法调用异步方法&#xff0c;然后在异步方法执行其任务的时候继续执行(可能在相同的线程上&#xff0c;也可能在不同的线程上)。为什么会在不同的线程上&#xff1f; 答&#xff1a;在调用异步方法后&#xff0c;调用方法不会立即…

CAS(Compare And Swap)

目录 CAS概念 乐观锁与悲观锁 ABA问题 Unsafe类 ​编辑 原子类 基本类型原子类 原子引用类 原子数组 原子更新器类 原子累加器 CAS概念 CAS是Compare And Swap的缩写&#xff0c;中文翻译成&#xff1a;比较并交换&#xff0c;实现无锁并发时常用到的一种技术。它一…

3.Labview字符串与路径精讲(下) — 字符串及路径的用法汇总

本章讲解labview中的字符串和路径具体实践用例&#xff0c;从前面板字符串属性到后面板字符串函数应用做出详细概述&#xff0c;通过本文的学习希望大家了解到字符串及路径在labview编程中的重要地位。 本系列文章为labview 从基础到强化到精通的学习文章&#xff0c;大家可以随…

奥比中光深度相机(二):PyQt5实现打开深度摄像头功能

文章目录 奥比中光深度相机&#xff08;二&#xff09;&#xff1a;PyQt5实现打开深度摄像头功能官方给出的调用深度相机源码环境精炼 UI界面设计逻辑代码构建槽函数连接提取视频流在界面中显示深度视频流注意关闭相机 总体代码效果演示运行main.py代码选择相机打开摄像头关闭摄…