zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Codeforces 877 C. Slava and tanks
    Codeforces 877 D. Olya and Energy Drinks
    2017 10.25 NOIP模拟赛
    2017 国庆湖南 Day1
    UVA 12113 Overlapping Squares
    学大伟业 国庆Day2
    51nod 1629 B君的圆锥
    51nod 1381 硬币游戏
    [JSOI2010]满汉全席
    学大伟业 2017 国庆 Day1
  • 原文地址:https://www.cnblogs.com/Asimple/p/10262296.html
Copyright © 2011-2022 走看看