最近一浙大的碩士在網上發文稱,因為自己輕度脊柱側彎被比亞迪拒絕入職,引起了網友的極大熱議,脊柱側彎能影響工作嗎?是不是給了offer想反悔,脊柱側彎只是一個理由而已。
我也不太清楚入職體檢是否要查脊柱,現在脊柱側彎的人并不少,主要集中在青少年之間,脊柱側彎主要是由于長期趴在桌子上、單肩背包、坐姿不正,缺乏運動等一些原因引起的。
找工作卡年齡也就算了,現在又卡脊柱,以后會不會卡血型,卡長相……,就是人太多了,以前都沒聽過,現在找工作各種奇葩的卡這卡那。
--------------下面是今天的算法題--------------
來看下今天的算法題,這題是LeetCode的第1497題:檢查數組對是否可以被 k 整除,難度是中等。
給你一個整數數組 arr 和一個整數 k ,其中數組長度是偶數,值為 n 。現在需要把數組恰好分成 n / 2 對,以使每對數字的和都能夠被 k 整除。如果存在這樣的分法,請返回 true ;否則,返回 false。
示例1:
輸入:arr = [1,2,3,4,5,10,6,7,8,9], k = 5 輸出:true 解釋:劃分后的數字對為 (1,9),(2,8),(3,7),(4,6) 以及 (5,10) 。
示例2:
輸入:arr = [1,2,3,4,5,6], k = 10 輸出:false 解釋:無法在將數組中的數字分為三對的同時滿足每對數字和能夠被 10 整除的條件。
arr.length == n
1 <= n <= 10^5
n 為偶數
-10^9 <= arr[i] <= 10^9
1 <= k <= 10^5
問題分析
這題說的是把數組中的元素分為每兩個一組,判斷每組是否都能被 k 整除。如果直接分組不太好分,這里我們可以把數組中的元素都變一下,就是讓他們都對整數 k 求余,這樣數組中的元素就都小于 k 了。
然后在對數組排序,要想把數組中的元素每兩個分為一組,并且每組都能被 k 整除,只有選擇數組中的最大值和最小值搭配,原理很簡單,因為數組中的值都是小于 k 的,最大值和最小值的和如果能被 k 整除,那么這個和只能等于 k 或者 0 (除非數組中的元素都是0)。
如果最大值和最小值的和小于 k ,那么最小值永遠找不到和它搭配的數字了,因為最大值和它搭配還小于 k ,其他值和它搭配就更小于 k 了。
如果最大值和最小值的和大于 k ,那么最大值永遠找不到和它搭配的數字了,因為最小值和它搭配還大于 k ,其他值和它搭配就更大于 k 了。
這里要注意的是如果最小值是 0 ,不能和最大值搭配,只能和最小值搭配,因為 0 也能被 k 整除。
JAVA:
public boolean canArrange(int[] arr, int k) { int n = arr.length; // 對 k 求余,如果是負數把它轉為正數 for (int i = 0; i < n; i++) arr[i] = ((arr[i] % k) + k) % k; Arrays.sort(arr);// 排序 int left = 0, right = n - 1; while (left < n && arr[left] == 0) left++;// 0 可以被任何數整除,跳過 0 。 if (left % 2 == 1)// 0 的個數是奇數,返回false。 return false; while (left < right) { // 非零元素第一個要和最后一個組合,然后判斷是否能被 k 整除。 if ((arr[left++] + arr[right--]) % k != 0) return false; } returntrue; }
C++:
public: bool canArrange(vector
&arr, int k) { int n = arr.size(); // 對 k 求余,如果是負數把它轉為正數 for (int i = 0; i < n; i++) arr[i] = ((arr[i] % k) + k) % k; sort(arr.begin(), arr.end());// 排序 int left = 0, right = n - 1; while (left < n && arr[left] == 0) left++;// 0 可以被任何數整除,跳過 0 。 if (left % 2 == 1)// 0 的個數是奇數,返回false。 return false; while (left < right) { // 非零元素第一個要和最后一個組合,然后判斷是否能被 k 整除。 if ((arr[left++] + arr[right--]) % k != 0) return false; } returntrue; }
筆者簡介
博哥,真名:王一博,畢業十多年, 作者,專注于 數據結構和算法 的講解,在全球30多個算法網站中累計做題2000多道,在公眾號中寫算法題解800多題,對算法題有自己獨特的解題思路和解題技巧 。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.