力扣爆刷第96天之hot100五连刷66-70

力扣爆刷第96天之hot100五连刷66-70

文章目录

      • 力扣爆刷第96天之hot100五连刷66-70
      • 一、33. 搜索旋转排序数组
      • 二、153. 寻找旋转排序数组中的最小值
      • 三、4. 寻找两个正序数组的中位数
      • 四、20. 有效的括号
      • 五、155. 最小栈

一、33. 搜索旋转排序数组

题目链接:https://leetcode.cn/problems/search-in-rotated-sorted-array/description/?envType=study-plan-v2&envId=top-100-liked
思路:很简单,只需要先遍历找到数组旋转的中点,然后左右区间分别进行二分查找。

class Solution {public int search(int[] nums, int target) {if(nums.length == 1) return nums[0] == target ? 0 : -1;int slow = 0;for(int i = 1; i < nums.length; i++) {if(nums[i] > nums[slow]) {slow++;}else{int a = fun(nums, 0, slow, target);int b = fun(nums, i, nums.length-1, target);if(a != -1) return a;if(b != -1) return b;return -1;}}return fun(nums, 0, nums.length-1, target);}int fun(int[] nums, int left, int right, int target) {int a = left, b = right;while(left <= right) {int mid = left + (right - left) / 2;if(nums[mid] == target) {return mid;} else if(nums[mid] > target) {right = mid - 1;} else {left = mid + 1;}}return -1;}
}

二、153. 寻找旋转排序数组中的最小值

题目链接:https://leetcode.cn/problems/find-minimum-in-rotated-sorted-array/description/?envType=study-plan-v2&envId=top-100-liked
思路:仔细看会发现不管旋转多少次,旋转之后都是下面的这种情况,即左边整体高于右边,那么要寻找最小值,只需要二分逐段缩小区间,至于如何缩小,请注意nums[right]一定小于nums[left],求出中值后,如果nums[right]>nums[mid]就说明中值靠左,右边不要了,更新right=mid,如果nums[right]<=nums[mid]说明中值靠右,只有nums[mid]小于nums[right]才可能出现最小值,所以更新left=mid+1.
在这里插入图片描述

class Solution {public int findMin(int[] nums) {int left = 0, right = nums.length-1;while(left < right) {int mid = left + (right - left) / 2;if(nums[mid] < nums[right]) {right = mid;}else {left = mid + 1;}}return nums[left];}
}

三、4. 寻找两个正序数组的中位数

题目链接:https://leetcode.cn/problems/median-of-two-sorted-arrays/description/?envType=study-plan-v2&envId=top-100-liked
思路:本题只需要两个索引在两个数组上遍历,第三个索引作为计数使用,当数量达到中值时停止,期间使用两个变量记录中值附近的值,最后通过长度奇偶来确定结果。

class Solution {public double findMedianSortedArrays(int[] nums1, int[] nums2) {int m = nums1.length, n = nums2.length, len = m + n;int i = 0, j = 0;int left = -1, right = -1;for(int k = 0; k <= len / 2; k++) {left = right;if(i < m && (j >= n || nums1[i] < nums2[j])) {right = nums1[i++];}else {right = nums2[j++];}}if(len % 2 == 0) {return (left + right) / 2.0;}else{return right;}}
}

四、20. 有效的括号

题目链接:https://leetcode.cn/problems/valid-parentheses/description/?envType=study-plan-v2&envId=top-100-liked
思路:反向思维,如果是左括号,不添加左括号,而是添加右括号,然后利用栈。

class Solution {public boolean isValid(String s) {Deque<Character> stack = new LinkedList<>();for(int i = 0; i < s.length(); i++) {char c = s.charAt(i);if(c == '(') {stack.push(')');}else if(c == '[') {stack.push(']');}else if(c == '{') {stack.push('}');}else if(stack.isEmpty() || stack.peek() != c) {return false;}else{stack.pop();}}return stack.isEmpty();}
}

五、155. 最小栈

题目链接:https://leetcode.cn/problems/min-stack/description/?envType=study-plan-v2&envId=top-100-liked
思路:最小栈要求一个常规栈,能够在常数时间内返回最小值,其实很简单,栈是先进后出的,只要要进入的值大于栈顶值,要进入的值就没必要记录了,一定不是最小值,所以,使用两个栈,一个栈正常进栈出栈,另一个栈只让最小值或者栈顶元素进栈。

class MinStack {Deque<Integer> stack1 = new LinkedList<>();Deque<Integer> stack2 = new LinkedList<>();public MinStack() {stack2.push(Integer.MAX_VALUE);}public void push(int val) {stack1.push(val);stack2.push(Math.min(stack2.peek(), val));}public void pop() {stack1.pop();stack2.pop();}public int top() {return stack1.peek();}public int getMin() {return stack2.peek();}
}/*** Your MinStack object will be instantiated and called as such:* MinStack obj = new MinStack();* obj.push(val);* obj.pop();* int param_3 = obj.top();* int param_4 = obj.getMin();*/

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

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

相关文章

【研发日记】Matlab/Simulink技能解锁(五)——Simulink布线技巧

前言 见《【研发日记】Matlab/Simulink技能解锁(一)——在Simulink编辑窗口Debug》 见《【研发日记】Matlab/Simulink技能解锁(二)——在Function编辑窗口Debug》 见《【研发日记】Matlab/Simulink技能解锁(三)——在Stateflow编辑窗口Debug》 见《【研发日记】Matlab/Simulink…

虚拟环境的激活

(此博客仅用于我记录虚拟环境的激活方法) 虚拟环境的激活命令: venv/Scripts/activate 在F:\git repo\Database-Course-Design 这个文件夹中启动命令行 这个文件夹中含有虚拟环境venv 输入命令venv/Scripts/activate&#xff0c;就得到下面的结果: 此时就激活了虚拟环境&…

python 基础知识点(蓝桥杯python科目个人复习计划64)

今日复习内容&#xff1a;做题 例题1&#xff1a;蓝桥课程抢购 问题描述&#xff1a; 为了能让更多的同学学到IT技术&#xff0c;蓝桥云课又开始了课程限时打折活动。 作为初学者的你&#xff0c;希望尽可能买到含金量总额更高的课程&#xff0c;当然其他同学也是这么想。 …

解锁基于LLMS的咒语:通过上下文学习重新思考对齐

一、写作动机&#xff1a; 最近的一项研究&#xff0c;LIMA&#xff0c;表明仅使用1K个示例进行SFT也可以实现显著的对齐性能&#xff0c;这表明对齐微调的效果可能是“表面的”。&#xff08;知识和推理能力来源于预训练&#xff0c;而不是必须通过对齐微调获得的。&#xff…

计算机图形学学习(一)——线的绘制、三角形填充绘制

以下摘抄自本人的计算机图形学上机报告 实验内容及要求&#xff1a; 理解并掌握中点画线法、Bresenham算法、扫描线法和重心坐标法的基本原理和算法步骤。使用编程语言C实现上述算法&#xff0c;并编写相应的代码。对于直线绘制算法&#xff0c;要求能够绘制水平、垂直、斜向等…

【消息队列开发】 实现内存加载

文章目录 &#x1f343;前言&#x1f333;实现思路&#x1f6a9;读取消息长度&#x1f6a9;读取相应长度的消息&#x1f6a9;进行反序列化&#x1f6a9;判定是否有效&#x1f6a9;加入有效消息&#x1f6a9;收尾工作&#x1f6a9;代码实现 ⭕总结 &#x1f343;前言 本次开发目…

未解决的问题:字符数组中元素的个数

情形1&#xff1a; #include<stdio.h> int main() {int arr_int1[10];int arr_int2[]{1,2,3,4,5};char arr_char1[10];char arr_char2[]"world";char arr_char3[]{h,e,l,l,o};int i;i0;while(arr_char2[i]!\0){i;}printf("%d\n",i);i0;while(arr_ch…

lwip优化任务优先级

在lwIP中&#xff0c;ethernetif_input线程负责接收和处理从以太网接口接收到的数据包&#xff0c;而tcpip主线程则负责处理lwIP协议栈中的各种事件和数据包。一般情况下&#xff0c;ethernetif_input线程的优先级应该设置为低于tcpip主线程的优先级。 这是因为在实时操作系统…

HarmonyOS ArkUI入门—HarmonyOS ArkUI来开发一个健康饮食应用

本文演示如果在DevEco Studio 3里面&#xff0c;用HarmonyOS的ArkUI来开发一个健康饮食应用。体验HarmonyOS 3最新API 9&#xff01; 获取HarmonyOS应用 HarmonyOS的ArkUI来开发一个健康饮食的ArkUI程序“ArkUIHealthyDiet”&#xff0c;基础代码已经有了[1]&#xff0c;个人…

20 OpenCV像素重映

文章目录 像素重映remap 重映算子代码示例 像素重映 简单点说就是把输入图像中各个像素按照一定的规则映射到另外一张图像的对应位置上去&#xff0c;形成一张新的图像。 g(x,y)是重映射之后的图像&#xff0c;h(x,y)是功能函数&#xff0c;f是源图像 remap 重映算子 Remap…

Java项目:52 springboot基于SpringBoot的旅游网站的设计与实现013

作者主页&#xff1a;舒克日记 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 旅游网站主要功能如下&#xff1a; 1.用户管理&#xff1a;注册、登录、退出、修改密码&#xff1b; 2.分类显示&#xff1a;显示旅游路线的分类&am…

MD5算法:密码学中的传奇

title: MD5算法&#xff1a;密码学中的传奇 date: 2024/3/15 20:08:07 updated: 2024/3/15 20:08:07 tags: MD5起源算法原理安全分析优缺点比较技术改进示例代码应用趋势 MD5算法起源&#xff1a; MD5&#xff08;Message Digest Algorithm 5&#xff09;算法是由MIT的计算机…

OpenHarmony教程指南—ArkTS时钟

简单时钟 介绍 本示例通过使用ohos.display 接口以及Canvas组件来实现一个简单的时钟应用。 效果预览 使用说明 1.界面通过setInterval实现周期性实时刷新时间&#xff0c;使用Canvas绘制时钟&#xff0c;指针旋转角度通过计算得出。 例如&#xff1a;"2 * Math.PI /…

Python QT 之PySide6简单入门

目录 1.开发环境配置 1.1 下载PySide6 2.2 配置pycharm相关快捷方式 PySide6_Designer - QT Designer 设计UI PySide6_UIC - 将QT Designer生成的UI文件转换为python文件 PySide6_RCC - 将RCC文件转换为python文件 2.第一个开发实例 2.1 QT desiger设计界面 2.2 将ui文…

一篇普通的生活周记

学习进度汇报&#xff1a; 这周主要是参考着视频敲完了一个vue2后台项目&#xff0c;主要是vue2element-ui,因为之前写项目的时候用过lay-ui&#xff0c;虽然是结合着node.js写的&#xff0c;但是大差不差&#xff0c;所以上手也很快。同时&#xff0c;学长发给我们了ruoyi项目…

关于如何重燃学习的激情

3月1日是我回学校的第一天。经历了长达8个月在家的昏暗时刻&#xff0c;我这10天的感觉和在家的感觉发生了翻天覆地的变化&#xff0c;最明显的莫过于学习状态的改变。 倒不是说在家学的不好&#xff0c;而是说在学校&#xff0c;我对学习的整体感觉&#xff0c;以及专注程度&…

【Leetcode每日一题】 递归 - 反转链表(难度⭐)(35)

1. 题目解析 题目链接&#xff1a;206. 反转链表 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 一、递归函数的核心任务 递归函数的主要职责是接受一个链表的头指针&#xff0c;并返回该链表逆序后的新头结点。递归…

【LeetCode热题100】160. 相交链表(链表)

一.题目要求 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&#xff0c;函数…

获取淘宝商品详情API数据指南(item_get-获得淘宝商品详情)

获取淘宝商品详情API数据是一个复杂的过程&#xff0c;涉及到多个步骤和可能的权限问题。以下是一个基本的指南&#xff0c;帮助你了解如何使用item_get接口获取淘宝商品详情。 1. 注册淘宝开放平台账号 首先&#xff0c;你需要在淘宝开放平台注册一个账号。这是获取API权限和…

稀碎从零算法笔记Day18-LeetCode:移除链表元素

前言&#xff1a;接近20day的时间&#xff0c;终于来到了链表。 题型&#xff1a;指针、链表 链接&#xff1a;203. 移除链表元素 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你…