【算法挨揍日记】day03——双指针算法_有效三角形的个数、和为s的两个数字

这篇具有很好参考价值的文章主要介绍了【算法挨揍日记】day03——双指针算法_有效三角形的个数、和为s的两个数字。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【算法挨揍日记】day03——双指针算法_有效三角形的个数、和为s的两个数字,算法挨揍日记,Leetcode,算法,职场和发展  

611. 有效三角形的个数

611. 有效三角形的个数https://leetcode.cn/problems/valid-triangle-number/

题目描述:

给定一个包含非负整数的数组 nums ,返回其中可以组成三角形三条边的三元组个数。

【算法挨揍日记】day03——双指针算法_有效三角形的个数、和为s的两个数字,算法挨揍日记,Leetcode,算法,职场和发展

解题思路:

本题是一个关于三角形是否能成立的题目,首先我们假设三角形的三边(a,b,c),我们要保证两边之和大于第三边

 【算法挨揍日记】day03——双指针算法_有效三角形的个数、和为s的两个数字,算法挨揍日记,Leetcode,算法,职场和发展

 题目给我们nums是乱序的,如果我们一个个abc去实验就是会超时(时间复杂度O^3)

当我们将sort排序一下,这样的话假设a<b<c的情况下,我们就只要去判断a+b>c是否成立!

这里我们遍历每个c(从后往前),这样时间复杂度就变成了N^2+NlogN也就是N^2

解题代码:

class Solution {
public:
    int triangleNumber(vector<int>& nums) {
        sort(nums.begin(),nums.end());
        //假设a<b<c
        int num=0;
        int n=nums.size();
        for(int i=n-1;i>=2;i--)
        {
            int left=0;
            int right=i-1;
            while(left<right)
            {
                if(nums[left]+nums[right]>nums[i])
                {
                    num+=(right-left);
                    right--;
                }
                else
                {
                    left++;
                }
            }
        }
        return num;
    }
};

  剑指 Offer 57. 和为s的两个数字

剑指 Offer 57. 和为s的两个数字https://leetcode.cn/problems/he-wei-sde-liang-ge-shu-zi-lcof/

题目描述:

输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。

【算法挨揍日记】day03——双指针算法_有效三角形的个数、和为s的两个数字,算法挨揍日记,Leetcode,算法,职场和发展

解题思路: 

首先本题是升序数组,这里如果我们用暴力的话会超时

这里我们使用双指针,我们让一个指向头left一个指向尾right,这里left、right和target会有三种关系

我们假设sub=right-left

【算法挨揍日记】day03——双指针算法_有效三角形的个数、和为s的两个数字,算法挨揍日记,Leetcode,算法,职场和发展

 第一种情况很显然直接返回就好了我们来研究一下第二种和第三种情况:

【算法挨揍日记】day03——双指针算法_有效三角形的个数、和为s的两个数字,算法挨揍日记,Leetcode,算法,职场和发展

解题代码:

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        int n=nums.size();
        int left=0;
        int right=n-1;
        while(nums[right]>target)
        {
            right--;
        }
        while(left<right)
        {
            int sub=target-nums[right];
            if(sub==nums[left])
            {
                return {nums[left],nums[right]};
            }
            else if(sub>nums[left])
            {
                left++;
            }
            else//sub<nums[left]
            {
                right--;
            }
        }
        return {-1,-1};
    }
};

 

 文章来源地址https://www.toymoban.com/news/detail-659118.html

到了这里,关于【算法挨揍日记】day03——双指针算法_有效三角形的个数、和为s的两个数字的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【双指针】:Leetcode611.有效三角形的个数

    朋友们、伙计们,我们又见面了,本专栏是关于各种算法的解析,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! C 语 言 专 栏: C语言:从入门到精通 数据结构专栏: 数据结构 个  人  主  页 : stackY、 C + + 专 栏   : C++ Linux 专 栏  : Linu

    2024年02月20日
    浏览(66)
  • 每日一题 611有效三角形的个数(相向双指针)

    给定一个包含非负整数的数组  nums  ,返回其中可以组成三角形三条边的三元组个数。 示例 1: 示例 2:

    2024年02月13日
    浏览(60)
  • 【LeetCode】双指针妙解有效三角形的个数

    Problem: 611. 有效三角形的个数 首先我们来分析一下本题的思路 看到题目中给出的示例 题目的意思很简单,就是将给到的数字去做一个组合,然后看看这三条边是否可以构成三角形。那判断的方法不用我说,相信大家如果读过小学的话应该都明白的,即 三角形两边之和大于第

    2024年02月10日
    浏览(38)
  • 【算法挨揍日记】day16——525. 连续数组、1314. 矩阵区域和

    525. 连续数组 给定一个二进制数组  nums  , 找到含有相同数量的  0  和  1  的最长连续子数组,并返回该子数组的长度。 本题的元素只有0和1,根据题目意思,我们可以把题目看成找一段最长的子区间使得区间的0 和1的数量相同,我们可以对其优化将所有的0变成-1,这样这

    2024年02月03日
    浏览(48)
  • 【算法挨揍日记】day04——15. 三数之和、18. 四数之和

      15. 三数之和 https://leetcode.cn/problems/3sum/ 给你一个整数数组  nums  ,判断是否存在三元组  [nums[i], nums[j], nums[k]]  满足  i != j 、 i != k  且  j != k  ,同时还满足  nums[i] + nums[j] + nums[k] == 0  。请你返回所有和为  0  且不重复的三元组。 注意: 答案中不可以包含重复的三元

    2024年02月09日
    浏览(55)
  • 「优选算法刷题」:有效三角形的个数

    给定一个包含非负整数的数组  nums  ,返回其中可以组成三角形三条边的三元组个数。 示例 1: 示例 2: 这道题,有一点挺新鲜的:构成三角形的三条边,仅需满足 2 条最短边之和大于等于第三条边即可。 以前的罗根,就总是傻傻地求 3 次😭 今天这道题,算是又打开了我新世

    2024年01月20日
    浏览(38)
  • 【算法挨揍日记】day07——904. 水果成篮、438. 找到字符串中所有字母异位词

    904. 水果成篮 你正在探访一家农场,农场从左到右种植了一排果树。这些树用一个整数数组  fruits  表示,其中  fruits[i]  是第  i  棵树上的水果  种类  。 你想要尽可能多地收集水果。然而,农场的主人设定了一些严格的规矩,你必须按照要求采摘水果: 你只有  两个

    2024年02月07日
    浏览(40)
  • 力扣:611. 有效三角形的个数

    今日为大家分享一道力扣611有效三角形的个数!本文将会为大家为大家讲解题目,然后算法思路,最后再进行代码的实现!希望看完本文能对读者有一定的收获! 通过题目的描述可以看出,意思是给定一个数组,然后观察数组中能元素组成三角形的个数! 题目上面那个例题

    2024年02月08日
    浏览(38)
  • 【编程题】有效三角形的个数

    给定一个包含非负整数的数组 nums ,返回其中可以组成三角形三条边的三元组个数。 示例1: 输入: nums = [2,2,3,4] 输出: 3 **解释:**有效的组合是: 2,3,4 (使用第一个 2) 2,3,4 (使用第二个 2) 2,2,3 示例2: 输入: nums = [4,2,3,4] 输出: 4 构成三角形的条件 :任意两条边之和大于第三边,其

    2024年02月11日
    浏览(45)
  • 每日一题:LeetCode-611. 有效三角形的个数

    前言: 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈    🔎🔎如果说代码有灵魂,那么它的灵魂一定是👉👉 算法 👈👈,因此,想要写出💚优美的程序💚,核心算法是必不可少的,少年,你渴望力量吗😆😆,想掌握程序的灵魂吗❓❗️那么就必须踏上这样一条漫长

    2024年02月01日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包