【LeetCode刷题】有效三角形个数、查找总价值为目标值的两个商品

简介: 【LeetCode刷题】有效三角形个数、查找总价值为目标值的两个商品

题目1:611.有效三角形个数

思路分析:

判断三边能形成三角形的条件:

  1. 任意两边之和大于第三边。a+b>c && a+c>b && b+c>a;
  2. 已知:a<= b <= c,只需要a+b>c即可。因为c最大,加上任意一个数肯定大于第三个。

思路1:暴力枚举O(N3)

三层循环,一层确定一个数,然后再判断,即可。

思路2:单调性,双指针解法O(NlogN+N2)

举例说明:如上图[2,2,3,4,5,9,10],先固定10,再两个指针分别指向第二大数9和最小数2,2+9>10,增加2,肯定也成立,则2到5都成立。反之,则移动左指针,指向更大的数,寻找是否有成立的数。直到左右指针相同,则与10有关的结束,在统计与9有关且不与10有关的组合。

代码实现:

注意:此处代码采取的是逆序,与上面分析相反。

class Solution {
public:
    int triangleNumber(vector<int>& nums) {
        if (nums.size() < 3)
            return 0;
        sort(nums.begin(), nums.end(), greater());
        int count = 0;
        for (size_t i = 0; i < nums.size() - 2; i++) {
            int left = i + 1, right = nums.size() - 1;
            while (left != right) {
                if (nums[right] + nums[left] > nums[i]) {
                    count += right - left;
                    left++;
                } else
                    right--;
            }
        }
        return count;
    }
};


LeetCode链接:611.有效三角形个数

题目2:LCR 179.查找总价格为目标值的两个商品

思路1:暴力枚举O(N2)

思路2:单调性,双指针O(N)

这里的数组都是有序的,所以最大值加最小值所得的sum,如果sum大于target,则减小最大值;

反之,增加最小值;直到找到相等;

代码实现:

class Solution {
public:
    vector<int> twoSum(vector<int>& price, int target) {
        int left = 0, right = price.size() - 1;

        while (left < right) {
            if (price[left] + price[right] > target)
                right--;
            else if (price[left] + price[right] == target)
                return {price[left], price[right]};
            else
                left++;
        }
        return {};
    }
};


LeetCode链接:LCR 179.查找总价格为目标值的两个商品

今日收获:

  • 双指针和单调性的结合;
  • 返回是vector时,可以返回{};
相关文章
|
2月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
3月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
113 2
|
17天前
|
机器学习/深度学习 人工智能 自然语言处理
280页PDF,全方位评估OpenAI o1,Leetcode刷题准确率竟这么高
【10月更文挑战第24天】近年来,OpenAI的o1模型在大型语言模型(LLMs)中脱颖而出,展现出卓越的推理能力和知识整合能力。基于Transformer架构,o1模型采用了链式思维和强化学习等先进技术,显著提升了其在编程竞赛、医学影像报告生成、数学问题解决、自然语言推理和芯片设计等领域的表现。本文将全面评估o1模型的性能及其对AI研究和应用的潜在影响。
16 1
|
2月前
|
数据采集 负载均衡 安全
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
本文提供了多个多线程编程问题的解决方案,包括设计有限阻塞队列、多线程网页爬虫、红绿灯路口等,每个问题都给出了至少一种实现方法,涵盖了互斥锁、条件变量、信号量等线程同步机制的使用。
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
|
3月前
|
算法 Java
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
50 6
|
3月前
|
Python
【Leetcode刷题Python】50. Pow(x, n)
本文介绍了LeetCode第50题"Pow(x, n)"的解法,题目要求实现计算x的n次幂的函数,文章提供了递归分治法的详细解析和Python实现代码。
26 1
|
3月前
|
Python
【Leetcode刷题Python】1467. 两个盒子中球的颜色数相同的概率
本文介绍了LeetCode第50题"Pow(x, n)"的解法,题目要求实现计算x的n次幂的函数,文章提供了递归分治法的详细解析和Python实现代码。
39 0
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
55 6
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 26. 树的子结构
这篇文章提供了解决LeetCode上"剑指Offer 26. 树的子结构"问题的Python代码实现和解析,判断一棵树B是否是另一棵树A的子结构。
50 4