【面试经典150】day 7

目录

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

2.跳跃游戏

3.跳跃游戏 II

 4.H 指数

 5.O(1) 时间插入、删除和获取随机元素

6.除自身以外数组的乘积

 7.加油站

 8.分发糖果

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

class Solution {
    public int maxProfit(int[] prices) {
        //和1相比,这个可以一直买卖股票,所以可以使用贪心策略,因为局部最优解就是全局最优解
        //亏钱直接不买卖
        int profit=0;
        for(int i=1;i<prices.length;i++){
            int tmp=prices[i]-prices[i-1];
            if(tmp>0) profit+=tmp;
        }
        return profit;
    }
}

2.跳跃游戏

最右可达位置维护。

有点类似拼接的路段。

class Solution {
    public boolean canJump(int[] nums) {
        int mx=0;
        for(int i=0;i<nums.length;i++){
            if(i>mx){
                //无法到达i
                return false;
            }
            //最右可以跳到i+nums[i]
            mx=Math.max(mx,i+nums[i]);
        }
        return true;
    }
}

3.跳跃游戏 II

class Solution {
    public int jump(int[] nums) {
        int ret=0;
        //已建造的桥的右端点
        int cur_right=0;
        //下一座桥的右端点最大值
        int next_right=0;
        for(int i=0;i<nums.length-1;i++){
            next_right=Math.max(next_right,i+nums[i]);
            //到达已造桥的右端点
            if(i==cur_right){
                cur_right=next_right;
                ret++;
            }
        }
        return ret;
    }
}

 4.H 指数

class Solution {
    public int hIndex(int[] citations) {
        int n=citations.length;
        //cnt统计引用次数的出现次数
        int [] cnt=new int [n+1];
        for(int c:citations){
            //min是处理>n的引用次数,归为n
            cnt[Math.min(c,n)]++;
        }
        int sum=0;
        //倒序遍历更好,一旦符合马上接收
        for(int i=n;;i--){
            sum+=cnt[i];
            if(sum>=i){
                return i;
            }
        }
    }
}

 5.O(1) 时间插入、删除和获取随机元素

class RandomizedSet {
    static int[] nums=new int[200010];
    Random random=new Random();
    Map<Integer,Integer>map=new HashMap<>();
    int idx=-1;

    public boolean insert(int val) {
        if(map.containsKey(val)) return false;
        nums[++idx]=val;
        map.put(val,idx);
        return true;       
    }
    
    public boolean remove(int val) {
        if(!map.containsKey(val)) return false;
        int loc=map.remove(val);
        if(loc!=idx) map.put(nums[idx],loc);
        nums[loc]=nums[idx--];
        return true;
    }
    
    public int getRandom() {
        return nums[random.nextInt(idx+1)];
    }
}

/**
 * Your RandomizedSet object will be instantiated and called as such:
 * RandomizedSet obj = new RandomizedSet();
 * boolean param_1 = obj.insert(val);
 * boolean param_2 = obj.remove(val);
 * int param_3 = obj.getRandom();
 */

6.除自身以外数组的乘积

class Solution {
    public int[] productExceptSelf(int[] nums) {
       //pre表示前缀积;suf表示后缀积;ret=两者之积即可;
       int n=nums.length;
       int[] pre=new int[n];
       pre[0]=1;
       for(int i=1;i<n;i++){
          pre[i]=nums[i-1]*pre[i-1];
       }

       int[] suf=new int[n];
       suf[n-1]=1;
       for(int i=n-2;i>=0;i--){
        suf[i]=nums[i+1]*suf[i+1];
       }

       int[] ret = new int[n];
       for(int i=0;i<n;i++){
        ret[i]=pre[i]*suf[i];
       }

       return ret;
    }
}

 7.加油站

class Solution {
    public int canCompleteCircuit(int[] gas, int[] cost) {
        int ret=0;
        //最小油量
        int mins=0;
        //油量
        int s=0;
        for(int i=0;i<gas.length;i++){
            //i处加油,从i到i+1
            s+=gas[i]-cost[i];
            if(s<mins){
                //更新最小油量
                mins=s;
                ret=i+1;
            }
        }
        //循环结束后,s 即为 gas 之和减去 cost 之和
        return s<0?-1:ret;
    }
}

 8.分发糖果

 

class Solution {
    public int candy(int[] ratings) {
        //贪心算法
        int [] left=new int[ratings.length];
        int [] right=new int[ratings.length];
        //都发一颗糖
        Arrays.fill(left,1);
        Arrays.fill(right,1);
        for(int i=1;i<ratings.length;i++){
            if(ratings[i]>ratings[i-1]) left[i]=left[i-1]+1;
        }
        int count=left[ratings.length-1];
        for(int i = ratings.length - 2; i >= 0; i--) {
            if(ratings[i] > ratings[i + 1]) right[i] = right[i + 1] + 1;
            count += Math.max(left[i], right[i]);
        }
        return count;     
    }
}

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【WebSocket实战】——创建项目初始架构

这一篇文章主要是为了介绍如何在visual中创建一个项目并服务于我们要做的websockt项目&#xff0c;所以这里如果已经懂得的人&#xff0c;可以直接跳过。 目录 1&#xff09;创建空白解决方案 2&#xff09;创建asp.NET Core项目 3&#xff09;创建winform项目作为客户端1 …

53页 PPT煤炭行业数字化转型规划方案

▲关注智慧方案文库&#xff0c;学习9000多份最新解决方案&#xff0c;其中 PPT、WORD超过7000多份 &#xff0c;覆盖智慧城市多数领域的深度知识社区&#xff0c;稳定更新4年&#xff0c;日积月累&#xff0c;更懂行业需求。 53页 PPT煤炭行业数字化转型规划方案 通过对煤企高…

乐维网管平台(一):如何精准掌控 IP 管理

业网络已成为支撑业务运转的关键基础设施&#xff0c;而在企业网络管理中&#xff0c;IP 管理至关重要&#xff0c;它就像是网络秩序的守护者&#xff0c;确保网络的高效运行、安全可靠。 一、为什么企业要进行 IP 管理 1. 优化资源分配 IP 地址作为网络中的重要资源&#xf…

驱动-----向内核新加文件

编译的过程是: 1.先复制一个默认的配置到.config(存放make menuconfig的配置结果)文件。 2.make menuconfig来可视化的选择编译的对象。 3.编译与否保存在.config里面 4.然后就makefile,使用.config中的配置 接下来就是加自己的驱动文件,把自己的文件编译加到内核里面…

探索 CSS Houdini:轻松构建酷炫的 3D 卡片翻转动画

在本文中&#xff0c;我将通过构建一个3D翻卡动画来探索Houdini的功能。这将帮助你了解Houdini的核心概念&#xff0c;并引导你完成实际的代码实现。你不仅能够掌握 Houdini 的核心概念&#xff0c;还可以跟随实际的代码实现&#xff0c;逐步完成这个动画效果。 我们将深入探讨…

SpringBoot基于若依项目工时统计成本核算管理源码带教程

是前后端分离的架构&#xff0c;前端使用Vue2&#xff0c;后端使用SpringBoot2。 技术框架&#xff1a;SpringBoot2.0.0 Mybatis1.3.2 Shiro swagger-ui jpa lombok Vue2 Mysql5.7 运行环境&#xff1a;jdk8 IntelliJ IDEA maven 宝塔面板 系统与功能介绍 这是一…

Date工具类详细汇总-Date日期相关方法

# 1024程序员节 | 征文 # 目录 简介 Date工具类单元测试 Date工具类 简介 本文章是个人总结实际工作中常用到的Date工具类&#xff0c;主要包含Java-jdk8以下版本的Date相关使用方法&#xff0c;可以方便的在工作中灵活的应用&#xff0c;在个人工作期间频繁使用这些时间的格…

paddleocr使用FastDeploy 部署工具部署 rknn 模型

在 PC 端转换 pdmodel 模型为 rknn 模型和在板端使用百度飞浆开发的 FastDeploy 部署工具部署 rknn 模型 以下内容是在 PC 端系统为 Ubuntu20.04&#xff0c;板端系统为ubuntu20.04 的环境下实现的 描述&#xff1a; 官网地址 RKNN软件栈可以帮助用户快速将AI模型部署到Rockc…

【C++】STL容器-string常用接口

1.string类的优势及重要性&#xff08;部分&#xff09; C语言中&#xff0c;字符串是以’\0’结尾的一些字符的集合&#xff0c;为了操作方便&#xff0c;C标准库中提供了一些str系列的库函数&#xff0c;但是这些库函数与字符串是分离开的&#xff0c;不太符合OOP的思想&…

join 在使用的时候优化

join 在使用的时候优化 join 在使用的时候要大表驱动小表,所谓大表驱动小表要如何判别大表和小表的区别呢? 简要分析 join MySQL 的执行计划 explain select * from t1 join t2 on t1.id = t2.id;我们直接执行上面的 explain 就可以看到他们的执行计划,并且在被驱动表中看…

计算机网络-RSTP工作过程与原理

前面我们已经学习了RSTP的一些基础概念以及对于STP的改进之处&#xff0c;因为RSTP兼容STP&#xff0c;所以实际上两者工作原理是一致的&#xff0c;这里只简单过一遍&#xff0c;然后进行一些基础实验即可&#xff0c;大致还是遵循选举根桥、确定端口角色与状态、全网收敛的思…

蓝牙资讯|iOS 18.1 正式版下周推送,AirPods Pro 2耳机将带来助听器功能

苹果公司宣布将在下周发布 iOS 18.1 正式版&#xff0c;同时确认该更新将为 AirPods Pro 2 耳机带来新增“临床级”助听器功能。在启用功能后&#xff0c;用户首先需要使用 AirPods 和 iPhone 进行简短的听力测试&#xff0c;如果检测到听力损失&#xff0c;系统将创建一项“个…

DevOps实践:在GitLab CI/CD中集成静态分析Helix QAC的工作原理与优势

基于云的GitLab CI/CD平台使开发团队能够简化其CI/CD流程&#xff0c;并加速软件开发生命周期&#xff08;SDLC&#xff09;。 将严格的、基于合规性的静态分析&#xff08;如Helix QAC所提供&#xff09;作为新阶段添加到现有的GitLab CI/CD流程中&#xff0c;将进一步增强SD…

什么是恶意爬虫,有什么应对措施

在当今数字化时代&#xff0c;网络爬虫作为一种重要的数据收集工具&#xff0c;广泛应用于搜索引擎、数据分析、商业情报等领域。然而&#xff0c;恶意爬虫的出现&#xff0c;却给网站安全带来了前所未有的挑战。今天我们就来简单了解下什么是恶意爬虫&#xff0c;爬虫对网站的…

【Power Query】List.Select 筛选列表

List.Select 筛选列表 ——在列表中返回满足条件的元素 List.Select(列表,判断条件) 不是列表的可以转成列表再筛选&#xff0c;例如 Record.ToList 不同场景的判断条件参考写法 (1)单条件筛选 列表中小于50的数字 List.Select({1,99,8,98,5},each _<50) (2)多条件筛…

39.3K Star,一个现代的数据库ORM工具,专为Node.js和TypeScript设计

大家好&#xff0c;今天给大家分享一个现代的数据库对象关系映射&#xff08;Object-Relational Mapping&#xff0c;ORM&#xff09;工具Prisma ORM&#xff0c;它旨在简化数据库操作&#xff0c;提高开发效率&#xff0c;并确保类型安全。 项目介绍 Prisma ORM适用于各种需要…

在Windows 10操作系统中搭建FTP

在Windows 10操作系统中搭建FTP&#xff08;File Transfer Protocol&#xff0c;文件传输协议&#xff09;服务器&#xff0c;可以为局域网内的用户提供文件共享和传输服务。以下是详细的搭建步骤&#xff0c;包括准备工作、安装与配置FTP服务、以及测试与访问FTP服务器等环节。…

HarmonyOS第一课——HarmonyOS介绍

HarmonyOS第一课 HarmonyOS介绍 HarmonyOS是新一代的智能终端操作系统&#xff08;泛终端服务的载体&#xff09;&#xff1b; 智慧互联协同&#xff0c;全场景交互体验&#xff1b; 核心技术理念&#xff1a; 一次开发 多次部署&#xff1a; 预览 可视化开发UI适配 事件交…

关闭或开启Win11系统的自动更新

Win11系统老是自动更新&#xff0c;每次更新后不仅拖慢计算机的运行速度&#xff0c;甚至打印机都无法使用了&#xff0c;给我们带来了很多困扰。 那么我们该如何彻底关闭Win11系统的自动更新呢&#xff1f;关闭Win11系统自动更新会有什么弊端呢&#xff1f; 下面就分享几个小方…

笛卡尔空间内的阻抗控制

目录 1. 笛卡尔空间内的阻抗控制方程推导2. 笛卡尔空间内的阻抗控制的控制框图3. 一些变体变体 1.1变体 1.2变体 2 4.笛卡尔空间内的阻抗控制方法总结参考资料 1. 笛卡尔空间内的阻抗控制方程推导 目标&#xff1a;让机器末端执行器在笛卡尔空间内的每个方向上都体现出由弹簧阻…