剑指Offer C++ --- 数组篇3
创始人
2025-05-28 02:01:58

1.连续子数组的最大和

涉及到:有重叠子问题和最优子结构,那么首先想到的就是动态规划

 状态定义: dp[i]表示以nums[i]结尾的子数组的最大和

 状态方程: dp[i]的初值为nums[i]

                    如果:dp[i] > 0   ==》 dp[i] = nums[i]+dp[i-1]

                    否则:dp[i] <= 0 ==》  什么也不做

                    max 表示最大子数组的和,如果当前子数组的和 > max  则更新max

int maxSubArray(vector& nums)
{int pre = 0;int cur = 0;int max = nums[0];for(auto x : nums){cur = x; if(pre > 0){cur += pre;}if(cur > max){max = cur;}pre = cur;}return max;
} 

2.统计一个数字在排序数组中出现的次数

思路:二分法+线性探测

    int search(vector& nums, int target) {int i = 0;int j = nums.size()-1;int mid = 0;int count = 1;while(i<=j){mid = i+((j-i)>>1);if(nums[mid] == target){break;}else if(nums[mid] < target){i = mid+1;}else{j = mid-1;}}//没找到if(i > j){return 0;}//找到了i = mid-1;j = mid+1;//向右探测while(j <= nums.size()-1){if(nums[mid] == nums[j]){++count;++j;}else{break;}}//向左探测while(i >= 0){if(nums[mid] == nums[i]){++count;--i;}else{break;}}return count;}

3.  0~n-1中缺失的数字

    int missingNumber(vector& nums) {int i = 0;for(auto x : nums){if(i++ != x){return x-1;}}return -1;}

4. 和为s的两个数字

    vector twoSum(vector& nums, int target) {int min = 0;int max = nums.size()-1;vector vec;while(min < max){if(nums[min] + nums[max] < target){++min;}else if(nums[min] + nums[max] > target){--max;}else{vec.push_back(nums[min]);vec.push_back(nums[max]);break;}}return vec;}

5.扑克牌中的顺子

思路:除0外,最大牌-最小牌 < 5

           除0外,牌不能有重复

    bool isStraight(vector& nums) {set s;int min = 14;int max = 0;//五张牌除0外,其余数字不能重复,最大的牌号 - 最小的 < 5 就证明可以组成顺子for(auto x : nums){if(x == 0){continue;}max = std::max(max,x); //最大牌  min = std::min(min,x); //最小牌if(s.find(x) != s.end()){ //重复牌return false;}s.insert(x);}return max - min < 5;}

6.礼物的最大价值

int maxValue(vector>& grid)
{int m = grid.size();      //行数int n = grid[0].size();   //列数//初始化第一行//行不动,列动for(int i = 1; i

7.数组中数字出现的次数

思路:位运算,异或

    vector singleNumbers(vector& nums) {//0异或任何数等于其本身//相同的数异或等于0//异或有交换律int z = 0;for(auto x : nums){z ^= x;}int m = 1;//找到最低位的1while((m&z) == 0){m <<= 1;}int i = 0;int j = 0; //根据m划分为两组//每组只有一个数会出现一次for(auto x : nums){if((m&x) == 0){i ^= x;}else{j ^= x;}}return vector{i,j};}

8.数组中数字出现的次数 II

 思路:

将容器中所有元素对应的二进制位存起来,对每个元素进行 &1后,>>1 存储下一位

在存储二进制位的容器,是由低位到高位

找只出现一次的数字时,对存储的每一位进行%3,然后 |=  先从高位开始

int singleNumber(vector& nums) 
{vector sumBin(32,0);for(auto x : nums){for(int i = 0; i<32; ++i){   //由低位到高位sumBin[i] += (x&1);x >>= 1;}}int res = 0;int m = 3;for(int i = 0; i<32; ++i){res <<= 1;//从高位到低位res |= (sumBin[31-i]%3);}return res;
}

9.股票的最大利润

思路:以最低价买入,以最高价卖出

dp[i] = dp[i-1] + prices - min(prices[0 -》i-1]);

int maxProfit(vector& prices)
{int dp = 0; //最大利润int minvalue = INT_MAX;for(auto x:prices){//寻找最低价买入if(minvalue > x){minvalue = x;continue;}//高价售出dp = max(dp,prices-minvalue);}return dp;
} 

10.构建乘积数组

    vector constructArr(vector& a) {if(a.empty()){return {};}vector left(a.size(),0);vector right(a.size(),0);vector b(a.size(),0);int length = a.size();left[0] = 1;right[length-1] = 1;for(int i = 1; i < length; ++i){left[i] = left[i-1]*a[i-1];}for(int j = length-2; j>=0; --j){right[j] = right[j+1]*a[j+1];}for(int k = 0; k

相关内容

热门资讯

必学习的前后端交互框架ajax ajax显然是最重要的框架 无论是c#,java,web程序通通能够解决前后端问题。 现在越来越多的...
北美关税缓和窗口期,独立站卖家... 作者 | 衡之编辑 | 刘景丰北美外贸商家,正在经历90天的关税缓和窗口期。北京时间5月12日,《中...
信创办公–基于WPS的PPT最... 信创办公–基于WPS的PPT最佳实践系列(表格和图标常用动画) 目录应...
逻辑回归全方位认识 目录 1.逻辑回归的原理和推导 2.逻辑回归相关面试题 1.逻辑回归的原理和推导 逻辑回顾假设数...
74岁王石罕见发声,能为万科做... 深陷债务风暴的万科,突然迎来了一个熟悉的身影——74岁的创始人王石站了出来。5月27日,万科创始人、...
朱华荣谈“车圈恒大”:业内存风... 长安汽车未来十年将投入2000亿元布局新汽车科技产业链,三年内发布飞行汽车和人形机器人产品文|周忻儿...
巨头“分合之道” A股约400... 中经记者 秦枭 北京报道5月25日晚间,市值900余亿元的曙光信息产业股份有限公司(603019.S...
css属性学习 css属性 就是我们选择器里面 { } 中的内容 字体样式 font-size 控制字体大小&#...
“灯塔计划”背后,SALOMO... SALOMON正在成为亚玛芬体育的增长新引擎。根据5月20日刚刚发布的2025年第一季度财报数据,亚...
linux系统性能分析(一) linux系统性能分析1 影响 Linux 性能的各种因素1.1 系统硬件资源1. CPU2. 内存...
selenium(4)----... webdriverAPI 一)定位元素的方式,必问 1.1)id来定位元素࿰...
廊坊银行打官司 荣盛发展拿两座... “ 面对廊坊银行的起诉,荣盛发展抛出了以物抵债方案,涉及海南和河北两处酒店资产。据悉,此次牵涉两起金...
药师帮举办2025投资者开放日... 5月27日,药师帮 ( 9885.HK ) 在广州总部举办上市以来首场投资者开放日活动,来自中欧、富...
健康意识崛起,家电企业如何打造... 当下,全球公共卫生体系深度变革,健康议题正在深刻影响消费市场走向。根据世界卫生组织最新数据,我国在推...
QT串口助手开发1之绘制界面 系列文章目录 QT串口助手开发1之绘制界面 QT串口助手开发1系列文章目录一、QT串口助手开发1...
蔚来能源实现天津换电县县通,5... IT之家 5 月 28 日消息,蔚来官方今日发文宣布:蔚来换电站 | 天津和平安泊城市港湾上线投运,...
“跨境大佬占”陈海军将出席易境... 2025年6月19日,由易境通与跨境猫联合主办的第三届跨境电商生态大会暨海外仓发展论坛将在深圳乐荟中...
本轮中美关税大博弈,中国企业如... 文|周君芝、毛晨、谢雨心(研究助理) 核心观点 本轮中美关税大博弈,中国企业如何应对? 企业怎么想:...
奥浦迈:并购项目正在稳步推进中 奥浦迈5月27日发布最新业绩说明会纪要,据公司介绍,截至2025年第一季度,共有258个已确定中试工...
3.15 22111作业  编写一个名为myfirstshell.sh的脚本,它包括一下内容          ...
财政部:4月全国发行新增债券2... 【大河财立方消息】5月28日,财政部发布2025年4月地方政府债券发行和债务余额情况。 2025年4...
原创 油... 鸡蛋市场:果然,蛋价触底反弹,市场呈现理性回调的走势!据悉,在国内鸡蛋市场,上周末,产销市场蛋价连创...
黄金ETF:5月27日融资买入... 融券方面,当日无融券交易。 融资融券余额69.56亿元,较昨日下滑0.09%。 小知识 融资融券:...
2025年一季度债券市场分析报... 一、宏观动态 宏观政策:财政政策更积极,赤字率提至4%,专项债限额4.4万亿,超长期特别国债1.3万...
日本给美国上了一课 日本给美国... 出品 | 妙投APP作者 | 丁萍头图 | AI生图近期,美债收益率再次飙升,30年期美债收益率突破...
机构看好A股市场当前具备赔率优... 5月28日,A股大盘指数横盘震荡,盘面上黄金珠宝、乳业、饮料制造、光模块CPO、核电等概念题材领涨。...
北京证监局对东方时尚驾校公司采... 新京报贝壳财经讯(记者张冰)北京证监局5月27日发布通报,因东方时尚驾驶学校股份有限公司使用公开发行...
【JavaWeb】Tomcat... 目录 Tomcat Tomcat的下载 ​编辑Tomcat的启动 Tomcat部署前端页面 Serv...
vs2022 libevent (1)在上文编译出的 libevent文件夹中有 lib,include...
SignalR+WebRTC技... 一、建立信令服务器 1、后台项目中新建一个对应的集线器类,取名VideoHub...