1296. Divide Array in Sets of K Consecutive NumbersGiven an array of integers nums and a positive integer k, check whether it is possible to divide this array into sets of k consecutive numbers.Return true if it is possible. Otherwise, return false.Example 1:Input:nums [1,2,3,3,4,4,5,6], k 4Output:trueExplanation:Array can be divided into [1,2,3,4] and [3,4,5,6].Example 2:Input:nums [3,2,1,2,3,4,3,4,5,9,10,11], k 3Output:trueExplanation:Array can be divided into [1,2,3] , [2,3,4] , [3,4,5] and [9,10,11].Example 3:Input:nums [1,2,3,4], k 3Output:falseExplanation:Each array should be divided in subarrays of size 3.Constraints:1 k n u m s . l e n g t h 10 5 1 k nums.length 10^51knums.length1051 n u m s [ i ] 10 9 1 nums[i] 10^91nums[i]109From: LeetCodeLink: 1296. Divide Array in Sets of K Consecutive NumbersSolution:Ideas:Sort the array, then repeatedly start groups from the smallest number that still has remaining occurrences.Code:#includestdbool.h#includestdlib.htypedefstruct{intkey;intcount;bool used;}HashEntry;staticintcompare(constvoid*a,constvoid*b){intx*(constint*)a;inty*(constint*)b;return(xy)-(xy);}staticunsignedinthashValue(intkey,intsize){return((unsignedint)key*2654435761u)%size;}staticHashEntry*findEntry(HashEntry*table,intsize,intkey){unsignedintindexhashValue(key,size);while(table[index].usedtable[index].key!key){index(index1)%size;}returntable[index];}boolisPossibleDivide(int*nums,intnumsSize,intk){if(numsSize%k!0){returnfalse;}qsort(nums,numsSize,sizeof(int),compare);inttableSizenumsSize*31;HashEntry*tablecalloc(tableSize,sizeof(HashEntry));if(tableNULL){returnfalse;}/* Count each number. */for(inti0;inumsSize;i){HashEntry*entryfindEntry(table,tableSize,nums[i]);if(!entry-used){entry-usedtrue;entry-keynums[i];}entry-count;}for(inti0;inumsSize;i){HashEntry*startEntryfindEntry(table,tableSize,nums[i]);intgroupsstartEntry-count;if(groups0){continue;}/* Form groups sets beginning with nums[i]. */for(intj0;jk;j){HashEntry*entryfindEntry(table,tableSize,nums[i]j);if(!entry-used||entry-countgroups){free(table);returnfalse;}entry-count-groups;}}free(table);returntrue;}
阅读完成 · 觉得有帮助?