zoukankan      html  css  js  c++  java
  • 1497. Check If Array Pairs Are Divisible by k

    Given an array of integers arr of even length n and an integer k.

    We want to divide the array into exactly n / 2 pairs such that the sum of each pair is divisible by k.

    Return True If you can find a way to do that or False otherwise.

    Example 1:

    Input: arr = [1,2,3,4,5,10,6,7,8,9], k = 5
    Output: true
    Explanation: Pairs are (1,9),(2,8),(3,7),(4,6) and (5,10).
    

    Example 2:

    Input: arr = [1,2,3,4,5,6], k = 7
    Output: true
    Explanation: Pairs are (1,6),(2,5) and(3,4).
    

    Example 3:

    Input: arr = [1,2,3,4,5,6], k = 10
    Output: false
    Explanation: You can try all possible pairs to see that there is no way to divide arr into 3 pairs each with sum divisible by 10.
    

    Example 4:

    Input: arr = [-10,10], k = 2
    Output: true
    

    Example 5:

    Input: arr = [-1,1,-2,2,-3,3,-4,4], k = 3
    Output: true
    

    Constraints:

    • arr.length == n
    • 1 <= n <= 10^5
    • n is even.
    • -10^9 <= arr[i] <= 10^9
    • 1 <= k <= 10^5
    class Solution {
        public boolean canArrange(int[] arr, int k) {
            int n = arr.length;
            for(int i = 0; i < n; i++){
                arr[i] = ((arr[i] % k) + k) % k;
            }
            Arrays.sort(arr);
            int zero = 0;
            while(zero < n && arr[zero] == 0) zero++;
            if(zero % 2 != 0) return false;
            for(int left = zero, right = n - 1; left < right;){
                if(arr[left] + arr[right] != k) return false;
                else{
                    right--;
                    left++;
                }
            }
            return true;
        }
    }

    思路:把数组里的书normalize成[0, k-1], 完了之后算0的数量,如果是奇数铁return fasle

    排序后加首尾,如果不等于k也是铁false

    class Solution {
        public boolean canArrange(int[] arr, int k) {
            int[] frequency = new int[k];
            for(int num : arr){
                num %= k;
                if(num < 0) num += k;
                frequency[num]++;
            }
            if(frequency[0]%2 != 0) return false;
            
            for(int i = 1; i <= k/2; i++)
                if(frequency[i] != frequency[k-i]) return false;
                
            return true;
        }
    }

    这个也差不多一个道理,用一个frequency数组存mod后的数组元素,然后对比相对位置的frequency是否相等即可

  • 相关阅读:
    centos 7.5搭建oracle DG
    oracle 11g修改归档日志目录及大小
    oracle修改数据文件路径
    oracle 11g调优常用语句
    MySQL MHA安装配置
    mysql中的数据库操作
    mysql 中用户与权限的操作
    percona server安装
    mysql配置文件相关
    条件判断中的真假
  • 原文地址:https://www.cnblogs.com/wentiliangkaihua/p/13211431.html
Copyright © 2011-2022 走看看