• 力扣每日一题 ---- 2905. 找出满足差值条件的下标 II


    这道题带有绝对值差的题,一看就是双指针的题,并且还带有两个限制,那么我们的做法就是

    固定一个条件,维护一个条件

    本题还用到了一个贪心思路,会介绍到

    那我们怎么固定一个条件,维护一个条件?

    并且固定哪一个条件,维护哪一个条件更好呢?

    1.如果是固定大小,维护下标,那么我们需要先排序,才能使用双指针

    2.如果是固定下标,维护大小,那么我们不需要排序,那么时间复杂度就比第一种好,选第二种

    这里我们怎么维护大小呢?(如果是枚举j,固定j下标,那么我们要算出i和i之前有效范围内最大最小值,如果前面有最大最小值符合,那么我们就符合)

    那么怎么说明只要最大最小值符合我们就符合呢,因为abs( ? -  nums[j]) 要想val最大,那么需要?最大或最小才能使的差值最大(这里就是一个贪心)

    我们枚举下标j,那么可以知道 i <= j - indexDifference,算出i,然后i , j就像滑动窗口一样固定住

    左边和右边了,然后记录i 和 i之前数的最大最小值,因为i下标和i下标之前的数一定是符合我们的下标条件了(那么这就是我们固定住了第一个条件,维护大小值),因为我们知道了下标就知道了

    数,那么我们就维护最大最小值的下标

    1. class Solution {
    2. public:
    3. vector<int> findIndices(vector<int>& nums, int indexDifference, int valueDifference)
    4. {
    5. int n = nums.size();
    6. int min_index = 0;
    7. int max_index = 0;
    8. vector<int> ans;
    9. for(int j = indexDifference;j < n;j++)
    10. {
    11. int i = j - indexDifference;
    12. if(nums[i] > nums[max_index]) max_index = i;
    13. if(nums[i] < nums[min_index]) min_index = i;
    14. if (abs(nums[j] - nums[min_index]) >= valueDifference) return {min_index, j};
    15. if (abs(nums[j] - nums[max_index]) >= valueDifference) return {max_index, j};
    16. }
    17. return {-1,-1};
    18. }
    19. };

  • 相关阅读:
    【无标题】
    Python (十三) 输出
    操作系统:银行家算法
    Strimzi Kafka Bridge(桥接)实战之三:自制sdk(golang版本)
    Solidity 小白教程:15. 异常
    PMP_第9章章节试题
    WPF TextBox长文本模式
    代码随想录算法训练营之JAVA|第四十三天|139. 单词拆分
    iOS中 Tagged Pointer 技术
    变量、存储过程与函数
  • 原文地址:https://blog.csdn.net/txh1873749380/article/details/134313430