• LeetCode Weekly Contest 119


    第一题:

    973. K Closest Points to Origin

     We have a list of points on the plane.  Find the K closest points to the origin (0, 0).

    (Here, the distance between two points on a plane is the Euclidean distance.)

    You may return the answer in any order.  The answer is guaranteed to be unique (except for the order that it is in.)

    Example 1:

    Input: points = [[1,3],[-2,2]], K = 1
    Output: [[-2,2]]
    Explanation: 
    The distance between (1, 3) and the origin is sqrt(10).
    The distance between (-2, 2) and the origin is sqrt(8).
    Since sqrt(8) < sqrt(10), (-2, 2) is closer to the origin.
    We only want the closest K = 1 points from the origin, so the answer is just [[-2,2]].
    

    Example 2:

    Input: points = [[3,3],[5,-1],[-2,4]], K = 2
    Output: [[3,3],[-2,4]]
    (The answer [[-2,4],[3,3]] would also be accepted.)
    

    Note:

    1. 1 <= K <= points.length <= 10000
    2. -10000 < points[i][0] < 10000
    3. -10000 < points[i][1] < 10000

    题目大意:给你一些点,让你找离远点最近的K个点。主要考的是二维数组排序。

    class Solution {
    public:
        vector<vector<int> > kClosest(vector<vector<int> >& points, int K) {
            vector<vector<int> > ans;
            int len = points.size();
            for(int i=0; i<len; i++) {
                int x = points[i][0];
                int y = points[i][1];
                points[i].push_back(x*x+y*y);
            }
            sort(points.begin(), points.end(), [](const vector<int> &a, const vector<int> &b) { return a[2] < b[2]; });
            for(int i=0; i<K; i++) {
                vector<int> res;
                res.push_back(points[i][0]);
                res.push_back(points[i][1]);
                ans.push_back(res);
            }
            return ans;
        }
    };
    View Code

    第二题:

    976. Largest Perimeter Triangle

    Given an array A of positive lengths, return the largest perimeter of a triangle with non-zero area, formed from 3 of these lengths.

    If it is impossible to form any triangle of non-zero area, return 0.

    Example 1:

    Input: [2,1,2]
    Output: 5
    

    Example 2:

    Input: [1,2,1]
    Output: 0
    

    Example 3:

    Input: [3,2,3,4]
    Output: 10
    

    Example 4:

    Input: [3,6,2,3]
    Output: 8
    

    Note:

    1. 3 <= A.length <= 10000
    2. 1 <= A[i] <= 10^6

    题目大意:从数组中,找出三个点组成一个周长最大的三角形,然后输出周长。

    数据比较小,直接暴力的。

    class Solution {
    public:
        bool ok(int a, int b, int c) {
            return a-b<c;
        }
    
        int largestPerimeter(vector<int>& A) {
            int len = A.size();
            sort(A.begin(), A.end());
            for(int i=len-1; i>=0; i--) {
                for(int j=i-1; j>=0; j--) {
                    if( ok(A[i], A[j], A[j-1])) {
                        return A[i]+A[j]+A[j-1];
                    }
                }
            }
            return 0;
        }
    };
    View Code

    第三题:

    974. Subarray Sums Divisible by K

    Given an array A of integers, return the number of (contiguous, non-empty) subarrays that have a sum divisible by K.

    Example 1:

    Input: A = [4,5,0,-2,-3,1], K = 5
    Output: 7
    Explanation: There are 7 subarrays with a sum divisible by K = 5:
    [4, 5, 0, -2, -3, 1], [5], [5, 0], [5, 0, -2, -3], [0], [0, -2, -3], [-2, -3]
    

    Note:

    1. 1 <= A.length <= 30000
    2. -10000 <= A[i] <= 10000
    3. 2 <= K <= 10000

    题目大意:统计有多少条满足条件的子序列。条件1:连续,必须是连续子序列,条件2:序列和可以整除K。

    思路:求出前缀和,想要找到连续子序列之和是可以整除K的话,那么前缀和只差模K也就是为0,也就是说统计模K相等的前缀和之差的个数,求一个等差数列求和。

    做题的时候开始考虑错了,后面想到了解决方法但是没时间了,对照rank写出了一个我自己都认为是错的程序,提交AC。想不清楚,等过几天想清楚了,在仔细写下吧。

    class Solution {
    public:  
        int subarraysDivByK(vector<int>& A, int K) {
            int a[K];
            memset(a, 0, sizeof(a));
            int len = A.size(); a[0] = 1;
            int res = 0;
            for(int i=0; i<len; i++) {
                A[i] += A[i-1];
                int cnt = (A[i]%K+K)%K;
                a[cnt] ++;
            }
            for(int i=0; i<K; i++) {
                res += (a[i]-1)*a[i]/2;
            }
            return res;
        }
    };
    View Code
  • 相关阅读:
    ES6和Node.js的import和export
    重写Router.prototype.push后还报NavigationDuplicated错误的解决方法
    nightwatch对前端做自动化测试
    使用video.js 7在html中播放rtmp视频流
    UEFI开发环境搭建
    类的静态成员
    const成员函数
    类和结构
    最长递增子序列
    C语言将十六进制字符串转化成十六进制
  • 原文地址:https://www.cnblogs.com/Asimple/p/10262296.html
Copyright © 2020-2023  润新知