力扣题解

目录

410.分割数组的最大值

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

51.N皇后


410.分割数组的最大值

这个题可以运用二分答案的算法来解题。定义一个左指针和一个右指针,令左指针等于数组的最大值,令右指针等于数组所有数之和。即最终的结果一定在他们之间。

long long l = 0, r = 0; for (int i = 0; i < nums.size(); i++) { r += nums[i]; if (l < nums[i]) { l = nums[i]; } }

定义一个返回值ans。然后进行二分。

long long ans=0; while(l<=r) { long long mid=(l+r)/2; if(cheak(mid,nums,k)) { ans=mid; r=mid-1; } else { l=mid+1; } }

这个题的cheak函数里面需要定义一个值ans初始为1和求和变量sum;然后遍历数组,进行求和当sum大于mid的时候那么ans就进行加一给sum重新赋值。最后进行判断ans与k的大小。

bool cheak(long long mid,vector<int>& nums,int k) { long long sum=0; int ans=1; for(int i=0;i<nums.size();i++) { if(sum+nums[i]>mid) { ans++; sum=nums[i]; } else sum+=nums[i]; } return ans<=k; }

完整代码

class Solution { public: int splitArray(vector<int>& nums, int k) { long long l = 0, r = 0; for (int i = 0; i < nums.size(); i++) { r += nums[i]; if (l < nums[i]) { l = nums[i]; } } long long ans=0; while(l<=r) { long long mid=(l+r)/2; if(cheak(mid,nums,k)) { ans=mid; r=mid-1; } else { l=mid+1; } } return ans; } bool cheak(long long mid,vector<int>& nums,int k) { long long sum=0; int ans=1; for(int i=0;i<nums.size();i++) { if(sum+nums[i]>mid) { ans++; sum=nums[i]; } else sum+=nums[i]; } return ans<=k; } };

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

这个题首先考虑数组是否为空。

int n1 = nums1.size(); int n2 = nums2.size(); int n = n1 + n2; if (n1 == 0 || n2 == 0) { if (n1 == 0 && n2 == 0) { return 0; } else if (n1 == 0) { if (n2 % 2 == 1) return nums2[n2 / 2]; else return (nums2[n2 / 2 - 1] + nums2[n2 / 2]) / 2.0; } else { if (n1 % 2 == 1) return nums1[n1 / 2]; else return (nums1[n1 / 2 - 1] + nums1[n1 / 2]) / 2.0; } }

判断之后进行查找那个中位数。

首先需要判断两个数组加起来的数是奇数还是偶数。如果是奇数只需要找一个n/2+1就可以了。

偶数需要找n/2+1和n/2。

else { if (n % 2 == 1) { return twocz(nums1, nums2, n / 2 + 1); } else { return (twocz(nums1, nums2, n / 2) + twocz(nums1, nums2, n / 2 + 1)) / 2.0; } }

进行查找,首先我们要定义一个a和b指向两个数组的初始位置。设需要找的中位数位置为k。

令num1[min(a+k/2-1,num1.size()-1)]和num2[min(b+k/2-1,num2.size()-1)]比较大小。小的那一个可以直接排除掉。所以k进去排除的部分。一直进行循环。

直到a==num1.size()或b==num2.size()或k==1;返回相应的值。

int twocz(vector<int> nums1, vector<int> nums2, int k) { int n = nums1.size(); int m = nums2.size(); int a = 0; int b = 0; while (1) { if (a == n) { return nums2[b + k - 1]; } if (b == m) { return nums1[a + k - 1]; } if (k == 1) { return min(nums1[a], nums2[b]); } int c = min(a + k / 2 - 1, n - 1); int d = min(b + k / 2 - 1, m - 1); int j1 = nums1[c]; int j2 = nums2[d]; if (j1 <= j2) { k -= c - a + 1; a = c + 1; } else { k -= d - b + 1; b = d + 1; } } }

完整代码

int twocz(vector<int> nums1, vector<int> nums2, int k) { int n = nums1.size(); int m = nums2.size(); int a = 0; int b = 0; while (1) { if (a == n) { return nums2[b + k - 1]; } if (b == m) { return nums1[a + k - 1]; } if (k == 1) { return min(nums1[a], nums2[b]); } int c = min(a + k / 2 - 1, n - 1); int d = min(b + k / 2 - 1, m - 1); int j1 = nums1[c]; int j2 = nums2[d]; if (j1 <= j2) { k -= c - a + 1; a = c + 1; } else { k -= d - b + 1; b = d + 1; } } } class Solution { public: double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { int n1 = nums1.size(); int n2 = nums2.size(); int n = n1 + n2; if (n1 == 0 || n2 == 0) { if (n1 == 0 && n2 == 0) { return 0; } else if (n1 == 0) { if (n2 % 2 == 1) return nums2[n2 / 2]; else return (nums2[n2 / 2 - 1] + nums2[n2 / 2]) / 2.0; } else { if (n1 % 2 == 1) return nums1[n1 / 2]; else return (nums1[n1 / 2 - 1] + nums1[n1 / 2]) / 2.0; } } else { if (n % 2 == 1) { return twocz(nums1, nums2, n / 2 + 1); } else { return (twocz(nums1, nums2, n / 2) + twocz(nums1, nums2, n / 2 + 1)) / 2.0; } } } };

51.N皇后

这个题运用了剪枝回溯法 定义三个bool变量分别判断列和两个对角线。之后与全排列相似。

完整代码

const int N=10; bool f1[10],f2[N+N],f3[N+N],f4[N+N]; void dfs(vector<vector<int>> &z,int n,int x,vector<int> &arr) { if(x==n) { z.push_back(arr); } for(int i=1;i<=n;i++) { if(x+1-i>=0) { if(!f1[i]&&!f2[x+1-i]&&!f4[x+1+i]) { f1[i]=true; f2[x+1-i]=true; f4[x+1+i]=true; arr[x]=i; dfs(z,n,x+1,arr); f1[i]=false; f2[x+1-i]=false; f4[x+1+i]=false; } } else { if(!f1[i]&&!f3[i-x-1]&&!f4[x+1+i]) { f1[i]=true; f3[i-x-1]=true; f4[x+1+i]=true; arr[x]=i; dfs(z,n,x+1,arr); f1[i]=false; f3[i-x-1]=false; f4[x+1+i]=false; } } } } class Solution { public: vector<vector<string>> solveNQueens(int n) { vector<vector<int>> z; vector<int> arr; for(int i=0;i<n;i++) { arr.push_back(0); } dfs(z,n,0,arr); vector<vector<string>> s; for(int i=0;i<z.size();i++) { vector<string>s1; for(int j=0;j<n;j++) { string s2; int a=z[i][j]; for(int z=0;z<n;z++) { if(z==a-1) s2.push_back('Q'); else s2.push_back('.'); } s1.push_back(s2); } s.push_back(s1); } return s; } };

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

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

相关文章

Java基础 - java基本程序设计结构

数据类型 在java中一共有8种基本类型,其中有4种整型,2种浮点类型,1种字符类型, 1种布尔类型。整型 整型用于表示没有小数部分的数值,允许是负数。int 4 字节 -2 147 483 648 ~ 2 147 483 647 (刚刚超过20亿) …

计算机毕业设计springboot智能健身房管理系统 基于SpringBoot的智慧健身会所综合运营平台 面向健身俱乐部的SpringBoot智能服务与资源调度系统

计算机毕业设计springboot智能健身房管理系统t92tknvq &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。当“健康中国”成为国家战略&#xff0c;健身场馆数量呈爆发式增长&#x…

PageHelp插件使用

PageHelp插件使用 一、PageHelper 是什么? PageHelper 是 MyBatis 的一个开源分页插件,它通过拦截 MyBatis 执行的 SQL 语句,自动在原SQL上添加分页语句(如 MySQL 的 LIMIT),并同时查询总记录数。 核心特点:简单…

毕设项目 基于大数据的K-means广告效果分析

基于大数据的K-means广告效果分析 项目运行效果&#xff1a; 毕业设计 基于大数据的K-means广告效果分析&#x1f9ff; 项目分享:见文末! 一、分析背景和目的 在大数据时代的背景下&#xff0c;广告主可以购买媒介变成直接购买用户&#xff0c;广告的精准投放对广告主、服务…

VGGT如何重塑三维视觉:从单图理解到多视角重建的技术演进

VGGT如何重塑三维视觉&#xff1a;从单图理解到多视角重建的技术演进 【免费下载链接】vggt VGGT Visual Geometry Grounded Transformer 项目地址: https://gitcode.com/gh_mirrors/vg/vggt 视觉几何基础Transformer&#xff08;VGGT&#xff09;正在重新定义三维场景理…

点大商城系统v2全开源版基础上增加22复制7人成团功能的一些开发经验导图支持(链动n+1功能+排队免单功能+大屏数据)

说明:点大商城已经全开源&#xff0c;全系支持二次开发&#xff08;功能修改、功能修复、增加功能、模板UI美化&#xff09;完全按照用户需求进行开发&#xff0c;有功能您尽管提分享最近用户开发案例需求&#xff0c;可能也能给你新脑洞&#xff08;22复制7人成团&#xff09;…

【硕士生必看】毕业论文初稿写崩了?Paperzz智能生成+深度查重,助你3天逆袭,导师直呼“这水平够发核心”!

Paperzz-AI官网免费论文查重复率AIGC检测/开题报告/文献综述/论文初稿 https://www.paperzz.cc/dissertationhttps://www.paperzz.cc/dissertation 副标题&#xff1a; 硕士论文不是“写”出来的&#xff0c;是“炼”出来的&#xff01;Paperzz帮你搞定文献、大纲、生成、查重、…

shell 容器执行脚本有异常时直接退出

shell 容器执行脚本有异常时直接退出# pod.yaml # set -e:当脚本中有命令执行返回非0时,脚本会立即终止执行并异常退出。 # set -u:当脚本中引用了未定义的变量时,脚本会立即终止执行并异常退出。 ... containers:…

【单片机毕业设计】【mcugc-mcu910】基于单片机的温控风扇

一、基本介绍 功能&#xff1a; 1、通过DS1302同步时间&#xff0c;并可修正时间&#xff0c;同时可设定风扇开关时间 2、通过DS18B20检测温度&#xff0c;当温度大于设置最小值&#xff0c;才开启风扇&#xff0c;在最小值和最大值之间&#xff0c;低速转动&#xff0c;大于最…

08cms房产多城市版最新v8.7含小程序及装修网的安装及配置方法整理出来希望能帮到大家

目前市面上很多假货&#xff01;都是用很早期的版本来冒充&#xff0c;大家要提高警惕&#xff01;此系统默认已经授权&#xff0c;无域名使用限制了&#xff0c;但是框架特殊 配置也比较陌生&#xff0c;我整理出配置方法分享给大家&#xff08;另外我这里有所有补丁 从低版本…

彻底掌握pyenv:Shim机制如何让Python版本管理如鱼得水

彻底掌握pyenv&#xff1a;Shim机制如何让Python版本管理如鱼得水 【免费下载链接】pyenv Simple Python version management 项目地址: https://gitcode.com/GitHub_Trending/py/pyenv 你是否曾在多个Python项目间切换时&#xff0c;被版本兼容性问题搞得焦头烂额&…

【博士生必看】博士论文初稿写不动了?Paperzz智能辅助+权威查重,助你突破瓶颈,导师说“这思路可以申基金”!

Paperzz-AI官网免费论文查重复率AIGC检测/开题报告/文献综述/论文初稿 https://www.paperzz.cc/dissertationhttps://www.paperzz.cc/dissertation 副标题&#xff1a; 博士论文不是“熬”出来的&#xff0c;是“智”出来的&#xff01;Paperzz帮你搞定海量文献、复杂大纲、深度…

记录一次微前端改造:把 10+ 个独立 Vue 项目整合到一起

记录一次微前端改造&#xff1a;把 10 个独立 Vue 项目整合到一起 最近主导了公司前端项目的微前端化改造&#xff0c;踩了不少坑&#xff0c;也有一些收获。趁着记忆还新鲜&#xff0c;把过程记录下来&#xff0c;希望能给有类似需求的同学一些参考。 声明&#xff1a;我也是第…

科技赋能味觉创意 “心语酪印” 西安首秀 打造可定制酸奶消费新场景

当古城西安的千年文脉遇上智能科技的创意火花&#xff0c;一场颠覆传统乳品消费的革新悄然启幕。2025 年 12 月 13 日&#xff0c;西安未央国际核心商圈人流涌动&#xff0c;国内首创智能奶皮子酸奶贩卖机品牌 “心语酪印” 以 “让美好发声” 为主题惊艳亮相。这台打破了 “贩…

ScienceDecrypting完全攻略:三步搞定科研文档解密难题

ScienceDecrypting完全攻略&#xff1a;三步搞定科研文档解密难题 【免费下载链接】ScienceDecrypting 项目地址: https://gitcode.com/gh_mirrors/sc/ScienceDecrypting 还在为那些带有使用期限的科研文档而烦恼吗&#xff1f;ScienceDecrypting正是为你量身打造的解决…

【Java-小程序毕设项目】基于微信小程序的个人健康管理系统+SpringBoot后端实现

【Java-小程序毕设项目】基于微信小程序的个人健康管理系统SpringBoot后端实现 weixin184-基于微信小程序的个人健康管理系统SpringBoot后端实现 文章目录【Java-小程序毕设项目】基于微信小程序的个人健康管理系统SpringBoot后端实现一、内容包括二、运行环境三、需求分析四、…

完整教程:构建AI智能体:九十五、YOLO视觉大模型入门指南:从零开始掌握目标检测

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Windows系统中msg命令的完整使用方法及相关示例

Windows系统中msg命令的完整使用方法及相关示例 在 Windows 系统中&#xff0c;msg 是内置的命令行工具&#xff0c;用于向本地/远程 Windows 终端会话发送消息。以下是 msg ** 命令的完整使用方法**&#xff0c;包括语法、参数、示例和注意事项&#xff0c;覆盖本地/远程、单…

Velero压缩引擎深度解析:从架构原理到实战调优

Velero压缩引擎深度解析&#xff1a;从架构原理到实战调优 【免费下载链接】velero Backup and migrate Kubernetes applications and their persistent volumes 项目地址: https://gitcode.com/GitHub_Trending/ve/velero 你是否曾经面对Kubernetes集群备份时&#xff…

【大气】大气模型计算不同海拔层的温度、气压、密度和声速Matlab仿真

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 &#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知,完整Matlab代码获取及仿…