【LeetCode 随笔】面试经典 150 题【中等+困难】持续更新中。。。

文章目录

    • 189. 轮转数组
    • 122. 买卖股票的最佳时机 II
    • 55. 跳跃游戏
    • 45. 跳跃游戏 II
    • 274. H 指数

🌈你好呀!我是 山顶风景独好
💝欢迎来到我的博客,很高兴能够在这里和您见面!
💝希望您在这里可以感受到一份轻松愉快的氛围!
💝不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
🚀 欢迎一起踏上探险之旅,挖掘无限可能,共同成长!

189. 轮转数组

给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。

思路如下:

  • 首先对整个数组实行翻转,这样子原数组中需要翻转的子数组,就会跑到数组最前面。
  • 这时候,从 kkk 处分隔数组,左右两数组,各自进行翻转即可。
class Solution {  // 旋转数组的方法  public void rotate(int[] nums, int k) {  // 如果k大于数组长度,则通过取模操作减少k的值,因为轮转长度超过数组长度是无效的  k %= nums.length;  // 首先将整个数组反转  reverse(nums, 0, nums.length - 1);  // 然后将前k个元素反转,得到原本的后k个元素在正确位置上的结果  reverse(nums, 0, k - 1);  // 最后将剩下的元素(即原数组中的前n-k个元素)反转,得到最终的轮转结果  reverse(nums, k, nums.length - 1);  }  // 反转数组指定区间内元素的方法  // 参数start表示区间的起始索引,end表示区间的结束索引(不包含end)  public void reverse(int[] nums, int start, int end) {  // 当起始索引小于结束索引时,进行反转操作  while (start < end) {  // 交换start和end索引处的元素  int temp = nums[start];  nums[start] = nums[end];  nums[end] = temp;  // 起始索引和结束索引分别向中间移动  start += 1;  end -= 1;  }  }  
}

122. 买卖股票的最佳时机 II

  • 给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。
  • 在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。
  • 返回 你能获得的 最大 利润 。

思路如下:
该问题的核心是在给定的股票价格数组中,找出可以执行多次买卖操作(即同一天内可以买入并卖出)以获得最大利润的方式。由于可以多次买卖,所以只要股票的价格在连续两天中是上涨的,就可以在第一天买入并在第二天卖出以获取利润。

class Solution {  public int maxProfit(int[] prices) {  // 初始化最大利润为0  int res = 0;  // 遍历价格数组,从索引1开始(因为我们需要比较当前价格与前一天的价格)  for (int i = 1; i < prices.length; i++) {  // 如果当前价格比前一天的价格高,说明我们可以买入前一天的价格并在今天卖出以获取利润  if (prices[i] - prices[i - 1] > 0) {  // 将这个利润累加到最大利润中  res += prices[i] - prices[i - 1];  }  }  // 返回最大利润  return res;  }  
}

55. 跳跃游戏

  • 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。
  • 判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。
class Solution {  public static boolean canJump(int[] nums) {  // 初始化一个变量k,用于表示当前能够到达的最远位置  int k = 0;  // 遍历数组中的每一个元素  for (int i = 0; i < nums.length; i++) {  // 如果当前位置i已经超过了能够到达的最远位置k,那么就无法继续跳跃,返回false  if (i > k) return false;  // 更新能够到达的最远位置k,取当前能够到达的最远位置k和当前位置i加上当前位置能够跳跃的最大长度nums[i]的较大值  k = Math.max(k, i + nums[i]);  // 如果在遍历过程中,k能够到达或超过数组的最后一个位置,那么说明能够到达最后一个位置,但此处不需要立即返回true  // 因为我们需要遍历完整个数组,以确保没有其他位置无法到达  }  // 如果遍历完整个数组都没有返回false,那么说明能够到达最后一个位置,返回true  return true;  }  
}

45. 跳跃游戏 II

  • 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。
  • 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i + j] 处:
  • 0 <= j <= nums[i]
  • i + j < n
  • 返回到达 nums[n - 1] 的最小跳跃次数。生成的测试用例可以到达 nums[n - 1]。
class Solution {  public int jump(int[] nums) {  // 获取数组的长度  int length = nums.length;  // end表示当前步跳跃可以到达的最远位置  int end = 0;  // maxPosition表示从当前位置起跳能够到达的最远位置  int maxPosition = 0;   // steps记录跳跃的次数  int steps = 0;  // 遍历数组,除了最后一个位置(因为最后一个位置不需要跳跃到达)  for (int i = 0; i < length - 1; i++) {  // 更新从当前位置起跳能够到达的最远位置  maxPosition = Math.max(maxPosition, i + nums[i]);   // 如果当前位置i是当前步跳跃可以到达的最远位置  if (i == end) {  // 更新当前步跳跃可以到达的最远位置为maxPosition  end = maxPosition;  // 跳跃次数加1  steps++;  }  }  // 当遍历完数组后,steps就是到达数组最后一个位置所需的最少跳跃次数  return steps;  }  
}

274. H 指数

  • 给你一个整数数组 citations ,其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数。
  • 根据维基百科上 h 指数的定义:h 代表“高引用次数” ,一名科研人员的 h 指数 是指他(她)至少发表了 h 篇论文,并且 至少 有 h 篇论文被引用次数大于等于 h 。如果 h 有多种可能的值,h 指数 是其中最大的那个。

示例 1:

  • 输入:citations = [3,0,6,1,5]
  • 输出:3
  • 解释:给定数组表示研究者总共有 5 篇论文,每篇论文相应的被引用了 3, 0, 6, 1, 5 次。
    由于研究者有 3 篇论文每篇 至少 被引用了 3 次,其余两篇论文每篇被引用 不多于 3 次,所以她的 h 指数是 3。

示例 2:

  • 输入:citations = [1,3,1]
  • 输出:1
class Solution {  public int hIndex(int[] citations) {  // 初始化左右指针,左指针指向数组开始,右指针指向数组末尾的下一个位置(因为数组索引是从0开始的)  int left = 0, right = citations.length;  // mid 用于存储二分查找的中间索引  int mid = 0, cnt = 0;  // 当左指针小于右指针时,进行二分查找  while (left < right) {  // 计算中间索引,注意这里使用 (left + right + 1) >> 1 而不是 (left + right) / 2  // 这样做是为了在 right - left 为奇数时,mid 偏向右侧,防止在 left 和 right 相邻时陷入死循环  mid = (left + right + 1) >> 1;  cnt = 0; // 重置计数,用于统计被引用次数大于等于 mid 的论文数量  // 遍历数组,统计被引用次数大于等于 mid 的论文数量  for (int i = 0; i < citations.length; i++) {  if (citations[i] >= mid) {  cnt++;  }  }  // 如果被引用次数大于等于 mid 的论文数量大于等于 mid,则 h 指数至少为 mid  // 更新 left 指针为 mid,继续在 [mid, right) 范围内查找可能的更大的 h 指数  if (cnt >= mid) {  left = mid;  // 否则,h 指数一定小于 mid,更新 right 指针为 mid - 1,继续在 [left, mid - 1] 范围内查找  } else {  right = mid - 1;  }  }  // 循环结束后,left 和 right 指针重合,left(或 right)就是要求的 h 指数  return left;  }  
}

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

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

相关文章

机器学习云环境搭建

在 https://support.huaweicloud.com/browsertg-obs/obs_03_1003.html 下载对应版本的 OBS Broswer 软件&#xff0c;如图&#xff0c;红框内的为安装文件&#xff0c;蓝色框内的为对应安装文件的校验文件&#xff08;无需下载&#xff09; 以 64 位机为例&#xff0c;下载完…

景源畅信电商:抖店需要的成本高吗?

在数字化时代的浪潮中&#xff0c;短视频平台迅速崛起&#xff0c;成为连接用户与商家的新桥梁。抖音作为其中的佼佼者&#xff0c;不仅改变了人们的娱乐方式&#xff0c;也催生了新型的电商模式——抖店。许多人好奇&#xff0c;入驻这样一个充满活力的平台&#xff0c;需要承…

618知识狂欢,挑本好书,点亮智慧生活!

618精选编程书单&#xff1a;提升你的代码力 一年一度的618又到啦&#xff01;今年的618就不要乱买啦&#xff0c;衣服买多了会被淘汰&#xff0c;电子产品买多了会过时&#xff0c;零食买多了会增肥&#xff0c;最后怎么看都不划算。可是如果你购买知识&#xff0c;坚持阅读&a…

第N2周:Embeddingbag与Embedding详解

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制&#x1f680; 文章来源&#xff1a;K同学的学习圈子 目录 什么是词嵌入&#xff1f; Embedding与EmbeddingBag详解 Embedding Embeddi…

代码随想录算法训练营第十七天|LeetCode110 平衡二叉树、LeetCode257 二叉树的所有路径

题1&#xff1a; 指路&#xff1a;LeetCode110 平衡二叉树 思路与代码&#xff1a; 左右子树的高度差小于等于1。对于这个题&#xff0c;递归比迭代方便太多&#xff0c;我也想过迭代&#xff0c;但是我没有写出来&#xff0c;大家可以自己试一下。递归代码如下&#xff1a;…

如何为ChatGPT编写有效的提示词:软件开发者的指南

作为一名软件开发者&#xff0c;特别是使用Vue进行开发的开发者&#xff0c;与ChatGPT等AI助手高效互动&#xff0c;可以极大地提升你的开发效率。本文将深入探讨如何编写有效的提示词&#xff0c;以便从ChatGPT中获取有用的信息和帮助。 1. 明确目标 在编写提示词之前&#…

后端之路第二站(正片)——SprintBoot之:分层解耦

很抽象&#xff0c;我自己也不好理解&#xff0c;仅作为一个前端转后端的个人理解 一、先解释一个案例&#xff0c;以这个案例来分析“三层架构” 这里我先解释一下黑马程序员里的这个案例&#xff0c;兄弟们看视频的可以跳过这节课&#xff1a;Day05-08. 请求响应-响应-案例_…

【webrtc】m98:Call的创建及Call对音频接收处理

call中多個流共享相同的辅助组件 这几个是与外部共用的 线程传输send控制module 线程任务队列工厂call的辅助组件中各种统计以及接收测的cc是自己创建的 call自己的多个辅助组件是外部传递来的 call 创建多个接收流 这里用一个set 来保存所有指针,并没有要map的意思:

【因果推断从入门到精通二】随机实验3

目录 检验无因果效应假说 硬币投掷的特殊性何在&#xff1f; 检验无因果效应假说 无因果效应假说认为&#xff0c;有些人存活&#xff0c;有些人死亡&#xff0c;但接受mAb114治疗而不是ZMapp与此无关。在174例接受mAb14治疗的患者中&#xff0c;113/17464.9%存活了28天&…

【MySQL精通之路】InnoDB(6)-磁盘结构

主要博客&#xff1a; 【MySQL精通之路】InnoDB存储引擎-CSDN博客 1 表 2 索引 【MySQL精通之路】InnoDB(6)-磁盘结构(2)-索引-CSDN博客 3 表空间 【MySQL精通之路】InnoDB(6)-磁盘结构(3)-表空间-CSDN博客 4 双写缓冲区 【MySQL精通之路】InnoDB(6)-磁盘结构(4)-双写缓冲…

修改MySQL root用户密码

ALTER USER ‘root’‘localhost’ IDENTIFIED BY ‘new_password’; ALTER USER ‘root’‘%’ IDENTIFIED BY ‘new_password’; 》 SET GLOBAL read_only OFF; select * from mysql.user;

Java入门基础学习笔记47——ArrayList

什么是集合呢&#xff1f; 集合是一种容器&#xff0c;用来装数据的&#xff0c;类似数组。 有数组&#xff0c;为什么还要学习集合呢&#xff1f; 数组定义完成并启动后&#xff0c;长度就固定了。 而集合是大小可变&#xff0c;开发中用的最多的。 集合的特点&#xff1a;大…

汇聚荣科技有限公司优点有哪些?

在当今快速发展的科技时代&#xff0c;企业之间的竞争愈发激烈。作为一家专注于科技创新与研发的公司&#xff0c;汇聚荣科技有限公司凭借其卓越的技术实力和创新能力&#xff0c;在业界树立了良好的口碑。那么&#xff0c;汇聚荣科技有限公司究竟有哪些优点呢?接下来&#xf…

C++利用TinyXML读取XML文件

TinyXML是什么&#xff1f; TinyXML是一个轻量级的C XML解析器&#xff0c;它提供了一种简单的方法来解析和操作XML文档。TinyXML被设计为易于使用和集成到C项目中&#xff0c;并且非常适合处理小型XML文件。 以下是TinyXML的一些主要特点和优点&#xff1a; 轻量级: T…

OSPF问题

.ospf 选路 域内 --- 1类&#xff0c;2类LSA 域间 --- 3类LSA 域外 --- 5类&#xff0c;7类LSA --- 根据开销值的计算规则不同&#xff0c;还分为类型1和类型2 ospf 防环机制 区域内防环&#xff1a;在同一OSPF区域内&#xff0c;所有路由器通过交换链路状态通告&#xff…

VUE面试题(3)--vue常见面试题

1.vue优点 低耦合。视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的"View"上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。 可重用性。你可以把一些视图逻辑放在一个ViewModel里面,让很多view重用这段视图逻辑。 …

226.翻转二叉树

翻转一棵二叉树。 思路&#xff1a; 指针做交换 用递归&#xff08;前序or后序&#xff0c;中序不行&#xff09; 前序&#xff1a;中左右 遍历到“中”的时候&#xff0c;交换它的左右孩子 然后分别对它的左孩子和右孩子使用“交换函数”&#xff08;定义的&#xff09;&a…

【网络版本计算器的实现】

本章重点 理解应用层的作用, 初识HTTP协议理解传输层的作用, 深入理解TCP的各项特性和机制对整个TCP/IP协议有系统的理解对TCP/IP协议体系下的其他重要协议和技术有一定的了解学会使用一些分析网络问题的工具和方法 ⭐注意!! 注意!! 注意!! 本课是网络编程的理论基础.是一个服务…

零基础学Java第二十二天之迭代器 Iterator

迭代器 Iterator 的理解和相关集合 使用 1、理解 迭代器&#xff08;Iterator&#xff09;是设计模式中的一种&#xff0c;它允许程序员遍历容器&#xff08;例如列表、集合等&#xff09;中的元素&#xff0c;而无需了解容器底层的实现细节。在编程中&#xff0c;迭代器提供了…

​第18章:JDK8-17新特性

1. 新特性概述 > 角度1&#xff1a;新的语法规则 &#xff08;多关注&#xff09;比如&#xff1a;lambda表达式、enum、annotation、自动拆箱装箱、接口中的默认方法和静态方法、switch表达式、record等> 角度2&#xff1a;增加、过时、删除API比如&#xff1a;新的日期…