当前位置: 首页 > wzjs >正文

受欢迎的网站建设平台杭州网站建设派迪网络

受欢迎的网站建设平台,杭州网站建设派迪网络,在哪里找专业推广团队,织梦模板使用教程📝前言说明: 本专栏主要记录本人的基础算法学习以及LeetCode刷题记录,按专题划分每题主要记录:(1)本人解法 本人屎山代码;(2)优质解法 优质代码;&#xff…

📝前言说明:

  • 本专栏主要记录本人的基础算法学习以及LeetCode刷题记录,按专题划分
  • 每题主要记录:(1)本人解法 + 本人屎山代码;(2)优质解法 + 优质代码;(3)精益求精,更好的解法和独特的思想(如果有的话)
  • 文章中的理解仅为个人理解。如有错误,感谢纠错

🎬个人简介:努力学习ing
📋本专栏:C++刷题专栏
📋其他专栏:C语言入门基础,python入门基础,C++学习笔记,Linux
🎀CSDN主页 愚润泽

视频

  • 202. 快乐数
    • 个人解
    • 优质解:
  • 11 盛最多水的容器
    • 个人解
    • 优质解:
  • 611. 有效三角形的个数
    • 个人解
    • 优质解:


202. 快乐数

在这里插入图片描述

个人解

思路:没思路,不知道如何判断这个数不是快乐树
用时:13:00
屎山代码:无


优质解:

思路:不要偷懒,自己手算一遍这个过程才能发现规律
在这里插入图片描述
你要问我为什么一定能成环
题目所给的数字范围:1 <= n <= 2^31 - 12^31 - 1 == 2,147,483,647,总共有9位数,我们往大了取,假设每一位都为9,则999999999的平方和肯定是最大的,结果是9*9*10 == 810,那最小的数呢?显然是1,也就是说每次变化的取值是在[1, 810]里面取。
但是,无限循环,取无数次,在[1, 810]里面取无数次,必然有重复!

对于能变成1的快乐数,因为1的平方还是1,所以,最后也是在一个全是1的环内循环

所以,这道题就变成:可以用快慢指针,慢指针每次移动一步,快指针每次移动两步,因为有速度差且有环,所以快慢指针一定会在环内相遇。当快慢指针相遇时,判断相遇的数是否为1即可。

代码:

class Solution {
public:int Sum(int n){int sum = 0;while(n){int i = n % 10;sum += i * i;n /= 10;}return sum;}bool isHappy(int n) {int slow = n, fast = Sum(n); // 这里可不能 fast == n, 因为while的判断条件是slow == fastwhile(slow != fast){slow = Sum(slow);fast = Sum(Sum(fast));}return slow == 1;}
};

11 盛最多水的容器

在这里插入图片描述

个人解

思路:
在这里插入图片描述
每次让短的边移动。
移动完成后,重新计算容积V的大小,如果更大就替换

用时:10:00(通过,因为这题以前写过)
屎山代码:

class Solution {
public:int maxArea(vector<int>& height) {int ans = 0, left = 0, right = height.size() - 1;while(left < right){int v = min(height[left], height[right]) * (right - left);if(v > ans) ans = v;else{if(height[left] < height[right]){left++;}else{right--;}}}return ans;}
};

时间复杂度:O(n)
空间复杂度:O(1)


优质解:

个人解已经比较优秀的解法了,不再过多探索


611. 有效三角形的个数

在这里插入图片描述

个人解

思路:通过枚举 最大边 + 相向指针 求解。

  1. 先对数组进行排序,整个数组递增
  2. 枚举最大边cur,然后设置双指针:right = cur - 1left = 0
  3. 要满足可以形成三角形,就需要两个短边之和 > 最大边
  4. 又因为数组有递增性,如果当前的left,right,cur所指向的三个数可以形成三角形,则rightleftright之间的所有数组合也可以形成三角形,因为这些值>=left指向的值。
  5. 双指针的移动问题,要满足nums[left] + nums[right] > nums[cur],很明显:left左移,会让左式更大,right右移会让左式更小。所以当不满足条件的时候,left左移,当满足条件以后right右移。

但是,我在做题的时候一开始尝试 枚举最小边 + 相向指针 出现了问题:如果我枚举的是最小边,则要满足:nums[right] - nums[left] < nums[cur],这时候因为数组是递增的,就出现了问题。因为right左移,左式会变小,left右移左式也会变小,变化相同显然是行不通的。

用时:18:00
屎山代码(通过):

class Solution {
public:int triangleNumber(vector<int>& nums) {int ans = 0, n = nums.size();ranges::sort(nums); // ranges 是 C++20 引入的ranges库for(int cur = n - 1; cur > 1; cur--) // 枚举最长边{int left = 0, right = cur - 1;while(left < right){if(nums[left] + nums[right] > nums[cur]){ans += right - left;right--;}else{left++;}}}return ans;}
};

时间复杂度:O( n 2 n^2 n2)
空间复杂度:O(1)


优质解:

枚举最小边的处理方法:
用同向双指针(滑动窗口)。
leftright的指针越靠近的时候,两边的差值越小。
我们可以,一开始让rightleft足够接近,让[left, right]这个窗口里面的组合都满足nums[right] - nums[left] < nums[cur],即:可以构成三角形
如何实现呢?
只需要在满足nums[right] - nums[left] < nums[cur]的时候,让left右移,移动到第一个满足的地方就停下来,然后统计窗口内满足的个数,加入ans一组算完以后,让right右移变远,但是left无须倒退,因为right增大了,左式增大,这时候要找的是让左式更小的left(这个很关键,不然容易写成O( n 3 n^3 n3),我就是,进行了回退…),进行下一组的计算。

代码:

class Solution {
public:int triangleNumber(vector<int>& nums) {int ans = 0, n = nums.size();ranges::sort(nums); // ranges 是 C++20 引入的ranges库for(int cur = 0 ; cur < n - 2; cur++) // 枚举最短边{int left = cur + 1;for(int right = cur + 2; right < n; right++){while(left < right && nums[right] - nums[left] >= nums[cur]){left++;}ans += right - left;}}return ans;}
};

时间复杂度:O( n 2 n^2 n2)
空间复杂度:O(1)


🌈我的分享也就到此结束啦🌈
要是我的分享也能对你的学习起到帮助,那简直是太酷啦!
若有不足,还请大家多多指正,我们一起学习交流!
📢公主,王子:点赞👍→收藏⭐→关注🔍
感谢大家的观看和支持!祝大家都能得偿所愿,天天开心!!!


文章转载自:

http://NmIOXfi7.fqyxb.cn
http://mY0xXrZD.fqyxb.cn
http://zT4mo3hZ.fqyxb.cn
http://kSHbZMff.fqyxb.cn
http://dvE4ne3s.fqyxb.cn
http://H2HoxLKn.fqyxb.cn
http://dlNBPQFF.fqyxb.cn
http://xy7AsURS.fqyxb.cn
http://6CbZfPy1.fqyxb.cn
http://55xOfetI.fqyxb.cn
http://tMBoJF9h.fqyxb.cn
http://f2TIfb2b.fqyxb.cn
http://AIoZLQEz.fqyxb.cn
http://ODTQh2kR.fqyxb.cn
http://XQp5PRLO.fqyxb.cn
http://OpVuqbZI.fqyxb.cn
http://fOBAXIK7.fqyxb.cn
http://ZGmUE9T6.fqyxb.cn
http://nqv9bK2G.fqyxb.cn
http://TPMykfbg.fqyxb.cn
http://w0a9iDZP.fqyxb.cn
http://EIi5XeAH.fqyxb.cn
http://ljzI4dqP.fqyxb.cn
http://Hmvlt05R.fqyxb.cn
http://KmEh3yll.fqyxb.cn
http://y2OYRtdv.fqyxb.cn
http://tb4Cq2TS.fqyxb.cn
http://0RfGyz3a.fqyxb.cn
http://BRqbCZx6.fqyxb.cn
http://Ibva1L83.fqyxb.cn
http://www.dtcms.com/wzjs/714294.html

相关文章:

  • php网站目录系统工业和信息化部发短信什么意思
  • 网站如何提高权重专业制作存单
  • wordpress关于本站北京市住房和城乡建设部网站
  • 和客户谈建网站怎么说长春做网站
  • 文网站建设服务费记入什么科目广州昨天发生重大新闻
  • 紫川网站建设wordpress系统教程 pdf
  • 手表常用网站域名
  • 没有网站可以做落地页wordpress阿里云储存
  • 合肥关键词网站排名在pc端预览手机网站
  • php购物网站设计代码网站单页制作教程
  • 阿里云 多域名解析 到不同的网站如何加强精神文明网站建设内容
  • 湖北商城网站建设多少钱淘宝客优惠券网站建设教程视频
  • 西安网站制作服务商个人房产查询系统网站官网
  • 淘宝网站建设维护会计科目网站索引量下降
  • 福州哪里会网站制作的常州互联网公司
  • 广东官网网站建设哪家好在线代理服务器网站
  • 网站开发好学上海营销型网站设计
  • 手机网站改版了高德地图在海外能用吗
  • 怎样自己建个人网站乐平城市建设局网站
  • 重庆最新数据消息58网站怎么做优化
  • 怎么做网站服务器吗基于cms设计网站的背景意义
  • 做期货主要看哪个网站wordpress添加右侧悬浮窗
  • 网络广告设计案例东莞seo排名外包
  • 英文网站建设网站兰州专业做网站的公司哪家好
  • 绞铜机 东莞网站建设网站开发常用工具
  • 阳江市做网站国外网站服务器免费
  • 深圳企业网站建设企业惠州+企业网站建设
  • 专门做pp他的网站郑州网站建设幸巴
  • 长治一般做一个网站需要多少钱大家推荐永久免费的服务器
  • 深圳松岗 网站建设建筑人才网站哪个比较好