LEETCODE 169 189 121 122 55

2023-09-19 11:26:03

169 多数元素

给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的,并且给定的数组总是存在多数元素。

class Solution {
public:
    int majorityElement(vector<int>& nums) {
        sort(nums.begin(),nums.end());
        int size = nums.size();
        return nums[size/2];
    }
};

多数元素是指在数组中出现次数大于n/2的元素。

众数是数组中出现次数最多的元素。

比对一下多数元素和众数这两个概念,不难发现多数元素一定是众数,并且一定是中位数。

所以就利用多数元素是中位数这个性质,对原数组进行排序,然后中间的那个数就是多数元素。

189 轮转数组

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

class Solution {
public:
    void rotate(vector<int>& nums, int k) {
        k%=nums.size();
        reverse(nums.begin(),nums.end());
        reverse(nums.begin(),nums.begin()+k);
        reverse(nums.begin()+k,nums.end());
    }
};

这个主要是要观察,总结规律。在演草纸上写一下原数组,然后再写一下轮转后的数组,把他俩放在两行上去比对,能够总结出规律,在一个就是要知道有reverse这个方法。 

121 买卖股票的最佳时机

给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。

你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。

返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int length = prices.size();
        int current_min_price = prices[0];
        int current_max_value = 0;
        for(int i=0;i<length;++i){
            current_max_value = current_max_value>(prices[i]-current_min_price)?current_max_value:(prices[i]-current_min_price);
            current_min_price = current_min_price<prices[i]?current_min_price:prices[i];
        }
        return current_max_value;
    }
};

比如说一共有n天的股票价格数据,那么我们就是把所有情况分为n种,第i种表示在第i天售出股票时,所能收获的最大利润值。最后比较这n个值,取最大即可。

具体到每一种情况时,我们已知是在第i天售出,要想要利润最大,那就是求出从第1到第i天,股票价格最低的那天是哪天,然后在那天买入即可,然后求出最大利润值。 

 122 买卖股票的最佳时机 II

给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。

在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。

返回 你能获得的 最大 利润 。

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int res = 0;
        for(int i=1;i<prices.size();++i){
            if(prices[i]>prices[i-1]){
            res+=prices[i]-prices[i-1];
            }
        }
        return res;
    }
};

这道题用的是贪心算法,它相比于上一题,就是要寻找多个区间,使得在每个相应区间里买卖股票得到的利润值之和最大,其实这个不是很理解,比较容易理解的应该是动态规划算法。

动态规划算法就是dp数组是二维的,第一维表示第i天,第二维表示这一天手里是否有股票。dp[i][0]:在第i天且手里没股票时的最大利润。dp[i][1]:在第i天且手里有股票时的最大利润。

dp[i][0] = max(dp[i-1][1]+pirces[i],dp[i-1][0]);

dp[i][1] = max(dp[i-1][0]-prices[i],dp[i-1][1])

55 跳跃游戏

给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。

判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。

class Solution {
public:
    bool canJump(vector<int>& nums) {
        int size = nums.size();
        int max = 0;
        for(int i=0;i<=max;++i){
            max = max>(i+nums[i])?max:(i+nums[i]);
            if(max>=size-1){
                return true;
            }
        }
        return false;
    }
};

 如果能够到达第i个位置,那么在第i个位置之前的所有位置都可以到达!

所以只需要遍历一遍数组,看看能到的最远的位置是哪就行。

更多推荐

Redis淘汰策略-架构案例2020(三十六)

上篇案例回顾:解释器,管道过滤,隐式调用优缺点?解释器则是独立的语法规则,可以通过解释器来解析,可扩展性很高,灵活性强。管道过滤则是侧重于数据的输入和输出,上一个模块的数据输出是下一个模块的输入,连接件事管道,过滤则是构件。隐式调用则强调触发和异步,多个构件会注册到一个模块里,当模块改变的时候,构件都会接收到消息从而跟

以酒为媒、以酒载道,五粮液携手首届“金熊猫奖”,讲好中国白酒故事

执笔|尼奥编辑|萧萧这是一次光影艺术与白酒酿造的和美之约,也是中国文化与世界多元文明的交融时刻,在影视与美酒的碰撞瞬间,共同擘画“美美与共,天下大同”的文明图景。9月19-20日,以“多彩文明·荣耀光影”为主题的首届“金熊猫奖”评选活动在成都举行。五粮液作为首届“金熊猫奖”全球战略合作伙伴亮相,深度融入金熊猫之夜、金熊

【C++】vector中的常见函数和使用

前言感觉vector在目前阶段很常用,就总结记录一些vector的用法方便自己忘记的时候查找因为是自用,所以我直接放代码了,只说明如何使用,以及一些小的注意点,对于函数具体实现过程,在这篇文章中,不做过多说明当然,我也给出了一些使用例子,供大家参考本文参考:C++vector操作代码#include<iostream>

报错处理:Error: Redis server is running but Redis CLI cannot connect

嗨,读者朋友们!今天我来跟大家分享一个我在运维过程中遇到的一个关于Linux上运行Redis服务时的报错及解决方法。报错信息如下:Error:RedisserverisrunningbutRedisCLIcannotconnect这个报错信息表明Redis服务器已经运行,但Redis命令行界面(CLI)无法连接。针对这

Python itertools教程(python中的迭代器与组合迭代器)

当谈到在Python中优雅地处理迭代任务时,itertools库是一个不可或缺的工具。这个强大的库提供了一系列用于创建、操作和合并迭代器的函数,能够让你的代码更加紧凑、高效,并且更易于阅读和维护。无论是解决排列组合问题、处理无限序列,还是简化循环结构,itertools都能够成为你的得力助手。Pythonitertoo

为什么建议项目经理尽快考CSPM?告诉你答案

2021年10月,中共中央、国务院发布的《国家标准化发展纲要》明确提出构建多层次从业人员培养培训体系,开展专业人才培养培训和国家质量基础设施综合教育。建立健全人才的职业能力评价和激励机制。由中国标准化协会(CAS)组织开展的项目管理专业人员能力评价等级证书(CSPM)应运而生。关于为什么要提前报考CSPM项目管理专业人

【Web3】DAO相关的基础知识

这里写目录标题DAO的基础概念为什么需要DAO?DAO的种类DAO的运作方式知名DAO的介绍BanklessDAOSeeDAODAO的生态全景图分类治理框架DAO的工具DAO众筹平台介绍-JuiceBoxDAO投票治理介绍-SnapshotDAO贡献&激励-POAPDAO信息管理-NotionDAO与传统组织的比较DA

css知识学习系列(4)-每天10个知识点

目录1.**CSS中的“box-sizing”属性与“border”属性有什么关系?**2.**在CSS中,如何使用“calc()”函数进行计算?有什么使用技巧?**3.**在CSS中,如何使用“@import”引入外部样式表?有哪些注意事项?**4.**Flexbox和Grid布局在实践中哪个更常用?为什么?**5.

redis 持久化机制

1.前言本文将先说明持久化、主存复制(及读写分离)、哨兵、以及集群几种技术分别解决了Redis高可用的什么问题;然后详细介绍Redis的持久化技术,主要是RDB和AOF两种持久化方案;在介绍RDB和AOF方案时,不仅介绍其作用及操作方法,同时介绍持久化实现的一些原理细节及需要注意的问题。最后,介绍在实际使用中,持久化方

蓝牙核心规范(V5.4)11.1-LE Audio 笔记之诞生的前世今生

专栏汇总网址:蓝牙篇之蓝牙核心规范学习笔记(V5.4)汇总_蓝牙核心规范中文版_心跳包的博客-CSDN博客爬虫网站无德,任何非CSDN看到的这篇文章都是盗版网站,你也看不全。认准原始网址。!!!1.LEAudio应用的场景这里面有四个场景是LEAudio最初需要应用的场景。比如助听器行业,这里可以讨论下它的拓扑结构、功

【Java】医院智能导诊系统源码:解决患者盲目就诊问题、降低患者挂错号比例

医院智能导诊系统解决患者盲目就诊问题,减轻分诊工作压力。降低患者挂错号比例,优化患者就诊流程,有效提高线上线下医疗机构接诊效率。患者可通过人体画像选择症状部位,了解对应病症信息和推荐就医科室。一、医院智能导诊系统概述医院智慧导诊系统是在医疗中使用的引导患者自助就诊挂号,在就诊的过程中有许多患者不知道需要挂什么号,要看什

热文推荐