力扣爆刷第111天之CodeTop100五连刷41-45

news2025/1/12 22:51:49

力扣爆刷第111天之CodeTop100五连刷41-45

文章目录

      • 力扣爆刷第111天之CodeTop100五连刷41-45
      • 一、232. 用栈实现队列
      • 二、4. 寻找两个正序数组的中位数
      • 三、31. 下一个排列
      • 四、69. x 的平方根
      • 五、8. 字符串转换整数 (atoi)

一、232. 用栈实现队列

题目链接:https://leetcode.cn/problems/implement-queue-using-stacks/description/
思路:用两个栈来模拟队列,分别为s1和s2,入队只往s1加,出队,s2不空,s2出,s2空了把s1的全部出栈然后再压入s2中,再出队。

class MyQueue {
    Deque<Integer> s1 = new LinkedList<>();
    Deque<Integer> s2 = new LinkedList<>();
    public MyQueue() {
       
    }

    public void push(int x) {
        s1.push(x);        
    }

    public int pop() {
        if(!s2.isEmpty()) {
            return s2.pop();
        }
        while(!s1.isEmpty()) {
            s2.push(s1.pop());
        }
        return s2.pop();
    }

    public int peek() {
        if(!s2.isEmpty()) {
            return s2.peek();
        }
        while(!s1.isEmpty()) {
            s2.push(s1.pop());
        }
        return s2.peek();
    }

    public boolean empty() {
       return s1.isEmpty() && s2.isEmpty();
    }
}

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

题目链接:https://leetcode.cn/problems/median-of-two-sorted-arrays/description/
思路:类似于归并排序,但我们只需要归并到一半即可,然后控制条件在一个while内完成两个数组的遍历,避免i<len1 && j < len2的情况,这样需要遍历多次,外加多次判断。

class Solution {
    public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        int left = 0, right = 0;
        int i = 0, j = 0, m = nums1.length, n = nums2.length, len = m+n;
        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 == 1) {
            return right;
        }else{
            return (left + right) / 2.0;
        }
    }
}

三、31. 下一个排列

题目链接:https://leetcode.cn/problems/next-permutation/description/
思路:求下一个排列,要求下一个排列是所有排列结果中,比自己大的当中的,最小的那个。解题原理很简单,类似于折线图,
这个是我简单画的一个图,可以理解为一个折线图,要寻找下一个排列,我们只需要从右边开始往左找,找到第一个小于自己的值,这个值需要由右侧第一个大于他的值进行交换,然后右侧是降序的,只需要翻转即可正序。思想非常简单,4就是下一个排列与上一个排列不同的开头位置,与2交换后,只需要把5,3,2排列即可。
在这里插入图片描述

class Solution {
    public void nextPermutation(int[] nums) {
        if(nums.length == 1) return ;
        int i = nums.length-2;
        while(i >= 0 && nums[i] >= nums[i+1]) i--;
        if(i >= 0) {
            for(int j = nums.length-1; j > i; j--) {
                if(nums[j] > nums[i]) {
                    swap(nums, i, j);
                    break;
                }
            }
        }
        reverse(nums, i+1, nums.length-1);
    }

    void swap(int[] nums, int x, int y) {
        int t = nums[x];
        nums[x] = nums[y];
        nums[y] = t;
    }
    void reverse(int[] nums, int x, int y) {
        while(x < y) {
            swap(nums, x, y);
            x++;
            y--;
        }
    }
}


四、69. x 的平方根

题目链接:https://leetcode.cn/problems/sqrtx/description/
思路:利用二分法进行查找。

class Solution {
    public int mySqrt(int x) {
        if(x < 2) return x;
        int left = 1, right = x/2;
        while(left <= right) {
            int mid = left + (right - left) / 2;
            if(mid > (x/mid)) {
                right = mid-1;
            }else{
                left = mid+1;
            }
        }
        return right;
    }
}

五、8. 字符串转换整数 (atoi)

题目链接:https://leetcode.cn/problems/string-to-integer-atoi/description/
思路:先去除前置空格,然后判断符号位,然后就是对于越界的判断,2的31次方减一就是Integer.MAX_VALUE,可以利用这个来判断是否越界。

class Solution {
    public int myAtoi(String s) {
        char[] c = s.toCharArray();
        if(c.length == 0) return 0;
        int res = 0, end = Integer.MAX_VALUE/10;
        int i = 0, flag = 1, len = c.length;
        while(i < len && c[i] == ' ') i++;
        if(i == len) return 0;
        if(c[i] == '-') flag = -1;
        if(c[i] == '-' || c[i] == '+') i++;
        for(int j = i; j < len; j++) {
            if(c[j] < '0' || c[j] > '9') break;
            if(res > end || res == end && c[j] > '7') return flag == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
            res = res * 10 + (c[j] - '0');
        }
        return res * flag;
    }
}

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

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

相关文章

Kubernetes(k8s):精通 Pod 操作的关键命令

Kubernetes&#xff08;k8s&#xff09;&#xff1a;精通 Pod 操作的关键命令 1、查看 Pod 列表2、 查看 Pod 的详细信息3、创建 Pod4、删除 Pod5、获取 Pod 日志6、进入 Pod 执行命令7、暂停和启动 Pod8、改变 Pod 副本数量9、查看当前部署中使用的镜像版本10、滚动更新 Pod11…

【Unity灶台】食品加工系统模型搭建

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;uni…

黑马鸿蒙笔记

目录 27.网络连接-Http请求数据 28.网络连接-第三方库axios 29.数据持久化-用户首选项 27.网络连接-Http请求数据 Http常见 GET一般与String配合&#xff0c;POST&#xff0c;PUT&#xff0c;DELETE与Object配合 28.网络连接-第三方库axios 29.数据持久化-用户首选项 不行&a…

C语言 | Leetcode C语言题解之第9题回文数

题目&#xff1a; 题解&#xff1a; bool isPalindrome(int x) {if(x < 0)return false;long int sum0;long int nx;while(n!0){sumsum*10n%10;nn/10;}if(sumx)return true;elsereturn false; }

labview如何创建2D多曲线XY图和3D图

1如何使用labview创建2D多曲线图 使用“索引与捆绑簇数组”函数将多个一维数组捆绑成一个簇的数组&#xff0c;然后将结果赋值给XY图&#xff0c;这样一个多曲线XY图就生成了。也可以自己去手动索引&#xff0c;手动捆绑并生成数组&#xff0c;结果是一样的 2.如何创建3D图 在…

Qt 使用QPropertyAnimation动画效果的图片浏览器

文章目录 效果图功能点代码解析图片切换显示与动画效果图片缩放 总结 效果图 功能点 加载指定路径下的所有图片并显示滑动滑动条查看指定图片&#xff0c;也滚轮切换图片滑动条缩略图加入动画效果图片可以进行缩放移动查看 代码解析 整体来说相对&#xff0c;显示图片的是一…

小组分享内容第一部分:总览+HttpClients

目录 1.网络爬虫的作用&#xff08;人话&#xff09;&#xff1a; 2.使用的工具 3.不使用程序进行网页信息的获取的操作步骤 4.如何使用程序来进行上述操作 1.打开浏览器 2.输入网址 3.发送请求 4.获取响应 5.判断响应是否成功 6.获取响应里需要的内容 7.记得最后关…

window中如何在Anaconda虚拟环境中安装compressai

1, 进入CompressAI的Github代码页下载压缩包并解压到自己的项目路径 2&#xff0c;打开anaconda的prompt命令行&#xff0c;激活需要安装的虚拟环境&#xff0c;然后进入compressai文件夹&#xff0c;比如下操作&#xff1a; 3&#xff0c;输出安装命令行 pip install -e . -…

设计模式总结-简单工厂模式

简单工厂模式 创建型模式创建型模式概述创建型模式种类 简单工厂模式模式定义模式动机模式结构模式分析模式实例与解析实例一&#xff1a;简单电视机工厂实例二&#xff1a;权限管理 模式优缺点简单工厂模式的优点简单工厂模式的缺点 模式适用环境模式扩展 小结 创建型模式 创…

方案评估(Solution Evaluation)

背景 Evaluation 这个词更喜欢的翻译是评估&#xff0c;评价和估计&#xff0c;估计就是瞎蒙&#xff0c;忽悠&#xff0c;不确定的、动态的世界&#xff0c;想做确定性的方案很难的&#xff0c;那么就整一些数据指标经验来相互折腾、忽悠&#xff0c;以至于大家都信了&#x…

使用labelImg标注yolov5数据集并在kaggle中使用yolov5

使用labelImg标注yolov5数据集并在kaggle中使用yolov5 文章目录 前言一、labelImg标注1.1. 下载exe文件1.2. labelImg 下载&#xff08;源码&#xff09;1.3. 环境配置1.4. 使用1.4.1. 设置1.4.2. 导入图片并标注 二、在kaggle中使用2.1. 下载源码2.2. 编辑配置文件2.3. 将压缩…

2024年第八届人工智能与虚拟现实国际会议(AIVR 2024)即将召开!

2024年第八届人工智能与虚拟现实国际会议&#xff08;AIVR 2024&#xff09;将2024年7月19-21日在日本福冈举行。人工智能与虚拟现实的发展对推动科技进步、促进经济发展、提升人类生活质量等具有重要意义。AIVR 2024将携手各专家学者&#xff0c;共同挖掘智能与虚拟的无限可能…

网易RAG问答知识库开源了,Star 6K!!

网易RAG问答知识库开源了&#xff0c;Star 6K&#xff01;&#xff01; RAG 问答知识库 QAnything 开源了QAnything 架构设计剖析整个架构的工作流程主要包含三个环节为什么需要两阶段检索&#xff1f;使用的基座大模型相关技术组件 QAnything 本地部署一键部署安装&#xff0c…

【MATLAB源码-第30期】基于matlab的内边界边缘检测算法。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 在计算机视觉领域&#xff0c;图像分割&#xff08;segmentation&#xff09;指的是将数字图像细分为多个图像子区域&#xff08;像素的集合&#xff09;&#xff08;也被称作超像素&#xff09;的过程。图像分割的目的是简化…

从零开始实现一个RPC框架(一)

前言 在上一篇文章中我们先列举了大致的需求&#xff0c;定义了消息协议。这次我们着手搭建基本的RPC框架&#xff0c;首先实现基础的方法调用功能。 功能设计 RPC调用的第一步&#xff0c;就是在服务端定义要对外暴露的方法&#xff0c;在grpc或者是thrift中&#xff0c;这一…

Codeforces CodeTON Round 8(Div.1 + Div.2) A~E

A. Farmer John’s Challenge (模拟) 题意&#xff1a; 构造一个长度为 n n n的数组&#xff0c;将这些数组围成一个圈&#xff08;顺时针&#xff09;从任意一个位置打开&#xff0c;有且仅有 k k k个非降序排列的数组。 分析&#xff1a; k 1 k1 k1时&#xff0c;升序输…

WGCAT工单系统使用指南 - 工单有哪几种状态

WGCAT工单管理系统设计的工单生命周期比较简单易懂 1、待接收 2、处理中 3、已拒绝 4、已完成 5、已关闭

鸿蒙OS开发实例:【应用状态变量共享】

平时在开发的过程中&#xff0c;我们会在应用中共享数据&#xff0c;在不同的页面间共享信息。虽然常用的共享信息&#xff0c;也可以通过不同页面中组件间信息共享的方式&#xff0c;但有时使用应用级别的状态管理会让开发工作变得简单。 根据不同的使用场景&#xff0c;ArkT…

阿基米德签证管理系统源码正式发布啦,基于thinkphp8.0+element-plus+uni-app

太棒了&#xff01;太棒了&#xff01;太棒了! 阿基米德签证系统的上线将为签证申请流程带来更高效和便利。 为什么选择阿基米德软件&#xff1f; 专注于行业垂直细分领域 / 专业级系统软件开发服务商 一、用户前端支持小程序、H5、PC和APP等主流流量端口 这样可以覆盖更广泛…

【零基础学数据结构】顺序表实现书籍存储

目录 书籍存储的实现规划 ​编辑 前置准备&#xff1a; 书籍结构体&#xff1a; 书籍展示的初始化和文件加载 书籍展示的销毁和文件保存 书籍展示的容量检查 书籍展示的尾插实现 书籍展示的书籍增加 书籍展示的书籍打印 书籍删除展示数据 书籍展示修改数据 在指定位置之前…