• LeetCode Contains Duplicate III


    LeetCode Contains Duplicate III

    题目

    这里写图片描写叙述

    思路

    我的方法是先用一个结构体。存下每个数字的值和其原坐标;
    然后依据值大小排序;
    接着遍历每个数字num[i].val;
    利用二分查找找到刚好比num[i].val - t - 1大的数字的坐标。
    然后依据坐标推断是否存在值就可以;
    关于二分查找可见:Binary Search

    代码

    struct num {
        int pos, val;
    };
    
    int AD(struct num * nums, int l, int r) {
        int K = nums[l].val;
        int Kp = nums[l].pos;
        while (l < r) {
            while (l < r && nums[r].val > K) r--;
            if (l < r) nums[l++] = nums[r];
            while (l < r && nums[l].val < K) l++;
            if (l < r) nums[r--] = nums[l];
        }
        nums[l].val = K;
        nums[l].pos = Kp;
        return l;
    }
    
    void QS(struct num * nums, int l, int r) {
        if (l < r) {
            int mid = AD(nums, l, r);
            QS(nums, l, mid - 1);
            QS(nums, mid + 1, r);
        }
    }
    
    // 在不下降的序列中寻找恰好比target大的数出现位置,也即第一个比target大的数出现的位置
    int binarySearchIncreaseFirstBigger(struct num * nums, int l, int r, int target) {  
        if (r - l + 1 == 0) return -1;
        while (l < r) {
            int m = l + ((r - l) >> 1);
            if (nums[m].val <= target) l = m + 1;
            else r = m;
        }
        if (nums[r].val > target) return r;
        else return -1;
    }
    
    bool containsNearbyAlmostDuplicate(int* nums, int numsSize, int k, int t) {
        struct num * N = (struct num*)malloc(sizeof(struct num) * numsSize);
        for (int i = 0; i < numsSize; i++) N[i].pos = i, N[i].val = nums[i];
        QS(N, 0, numsSize - 1);
        for (int i = 1; i < numsSize; i++) {
            int minPos = binarySearchIncreaseFirstBigger(N, 0, i - 1, N[i].val - t - 1);
            if (minPos == -1) {
    
            }
            else {
                for (int j = minPos; j < i; j++) {
                    if (abs(N[i].pos - N[j].pos) <= k) {
                        free(N);
                        return true;
                    }
                }
            }
        }
        free(N);
        return false;
    }
  • 相关阅读:
    vue项目中echarts使用渐变效果报错echarts is not defined
    vue cli 项目中设置背景图
    vue项目中使用echarts地图
    vue Echarts自适应浏览器窗口大小
    promise函数
    vue中路由传参的方式
    嵌套路由
    PHP——实验三 PHP表单交互
    PHP实验——实验二 php基本程序设计
    Ubuntu系统下安装完成tomcat进入管理页面
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/7206528.html
Copyright © 2020-2023  润新知