You are given an integer array arr. You can choose a set of integers and remove all the occurrences of these integers in the array.
Return the minimum size of the set so that at least half of the integers of the array are removed.
中文翻譯
給予你一個整數陣列 arr,你可以選擇一組整數集合,並刪除陣列中所有出現的他們。
回傳可以讓陣列至少一半的元素移除的最小集合數
範例及題目限制
先從第一個範例看起
選定了 {3,7} 這組集合,可以讓陣列中出現 3 或 7 都被移除掉
故剩下的 [5,5,5,2,2] 剛好數量為5,小於等於最初長度的一半
另外,限制中有提到陣列的長度為偶數
解題思路
C# 解決方案
方案1 – Dictionary + Linq
public class Solution {
public int MinSetSize(int[] arr) {
//0. half number
int mid = arr.Length/2;
//1. init dict
Dictionary<int,int> dict = new Dictionary<int,int>();
foreach(var i in arr)
{
if (!dict.ContainsKey(i))
{
dict.Add(i, 1);
}
else
{
dict[i] = dict[i]+1;
}
}
//2. check > order by dict value(count)
var sortedDict = from entry in dict orderby entry.Value descending select entry.Value;
int res = 0;
foreach(var s in sortedDict)
{
if (s>mid)
{
return res == 0 ? 1 : res+1;
}
else if (s<mid)
{
mid -= s;
res +=1;
}
else //s == mid
{
return res+1;
}
}
return res;
}
}
class Solution {
public int minSetSize(int[] arr) {
//0. half number
int mid = arr.length/2;
//1. init map
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for(int i : arr)
{
if (!map.containsKey(i))
{
map.put(i, 1);
}
else
{
map.replace(i, map.get(i)+1);
}
}
//2. check > order by map value(count)
Object[]vals = map.values().toArray();
Arrays.sort(vals, Collections.reverseOrder());
int res = 0;
for(var v : vals)
{
int s= (Integer)v;
if (s>mid)
{
return res == 0 ? 1 : res+1;
}
else if (s<mid)
{
mid -= s;
res +=1;
}
else //s == mid
{
return res+1;
}
}
return res;
}
}
與C#相同,僅是將Dictionary用Map取代
Python3 解決方案
方案1
class Solution:
def minSetSize(self, arr: List[int]) -> int:
mid = len(arr)/2
#init dictionary
d = {} #dict
for i in range(len(arr)):
if(arr[i] in d):
d[arr[i]] = d[arr[i]]+1
else:
d[arr[i]] = 1
#2. check > order by dict value(count)
d = dict(sorted(d.items(), key=lambda item: item[1], reverse=True))
res = 0
for s in d.values():
if (s>mid):
return 1 if res == 0 else res+1
elif (s<mid):
mid -= s
res +=1
else: #s == mid
return res+1
return res
JavaScript 解決方案
方案1
/**
* @param {number[]} arr
* @return {number}
*/
var minSetSize = function(arr) {
var mid = arr.length/2;
//1. init dict
var dict = { };
arr.forEach(function(item){
if(!(item in dict))
{
dict[item] = 1;
}
else
{
dict[item] = dict[item]+1;
}
});
//2.order by values
var k = Object.values(dict);
k.sort();
k = k.reverse();
//3.find result
var res = 0;
for (let i = 0; i < k.length; i++) {
const s = k[i];
if (s>mid)
{
return res == 0 ? 1 : res+1;
}
else if (s<mid)
{
mid -= s;
res +=1;
}
else //s == mid
{
return res+1;
}
}
return res;;
};
var uagb_data = {"ajax_url":"https:\/\/zyrastory.com\/wp-admin\/admin-ajax.php","uagb_masonry_ajax_nonce":"f8dc3568e5"};
var uagb_data = {"ajax_url":"https:\/\/zyrastory.com\/wp-admin\/admin-ajax.php","uagb_masonry_ajax_nonce":"f8dc3568e5","uagb_grid_ajax_nonce":"df590a05b6"};
( function() {
let elements = document.querySelectorAll( '.uagb-post-grid.uagb-block-5ecdc009 .uagb-post-pagination-wrap a' );
elements.forEach(function(element) {
element.addEventListener("click", function(event){
event.preventDefault();
const link = event.target.getAttribute('href').match( /\/page\/\d+\// )?.[0] || '';
const regex = /\d+/; // regular expression to match a number at the end of the string
const match = link.match( regex ) ? link.match( regex )[0] : 1; // match the regular expression with the link
const pageNumber = parseInt( match ); // extract the number and parse it to an integer
window.UAGBPostGrid._callAjax({"btnBorderTopWidth":1,"btnBorderLeftWidth":1,"btnBorderRightWidth":1,"btnBorderBottomWidth":1,"btnBorderTopLeftRadius":30,"btnBorderTopRightRadius":30,"btnBorderBottomLeftRadius":30,"btnBorderBottomRightRadius":30,"btnBorderStyle":"none","overallBorderColor":"","block_id":"5ecdc009","categories":"6","displayPostExcerpt":false,"displayPostComment":false,"displayPostImage":false,"imgSize":"medium","linkBox":false,"align":"center","orderBy":"rand","excludeCurrentPost":true,"postPagination":true,"pageLimit":0,"imageRatio":"2-3","imgEqualHeight":true,"UAGHideMob":true,"UAGHideTab":true,"UAGResponsiveConditions":true,"btnBorderLink":true,"btnBorderRadiusLink":true,"overallBorderLink":true,"overallBorderRadiusLink":true,"inheritFromTheme":true,"postType":"post","postDisplaytext":"No post found!","taxonomyType":"category","postsToShow":6,"enableOffset":false,"postsOffset":0,"displayPostDate":true,"excerptLength":15,"displayPostAuthor":false,"displayPostTitle":true,"displayPostTaxonomy":false,"hideTaxonomyIcon":true,"taxStyle":"default","displayPostTaxonomyAboveTitle":"withMeta","imgPosition":"top","bgOverlayColor":"#000000","overlayOpacity":"50","displayPostLink":true,"newTab":false,"ctaText":"Read More","btnHPadding":"","btnVPadding":"","columns":3,"tcolumns":2,"mcolumns":1,"width":"wide","order":"desc","rowGap":20,"rowGapTablet":20,"rowGapMobile":20,"columnGap":20,"bgType":"color","bgColor":"#f6f6f6","titleTag":"h4","titleFontSize":"","titleFontSizeType":"px","titleFontFamily":"","titleLineHeightType":"em","titleLoadGoogleFonts":false,"metaColor":"","highlightedTextColor":"#fff","highlightedTextBgColor":"#3182ce","metaFontSize":"","metaFontSizeType":"px","metaFontFamily":"","metaLineHeightType":"em","metaLoadGoogleFonts":false,"excerptColor":"","excerptFontSize":"","excerptFontSizeType":"px","excerptFontFamily":"","excerptLineHeightType":"em","excerptLoadGoogleFonts":false,"displayPostContentRadio":"excerpt","ctaBgType":"color","ctaBgHType":"color","ctaFontSize":"","ctaFontSizeType":"px","ctaFontFamily":"","ctaLineHeightType":"em","ctaLoadGoogleFonts":false,"paddingTop":20,"paddingBottom":20,"paddingRight":20,"paddingLeft":20,"contentPadding":20,"ctaBottomSpace":0,"ctaBottomSpaceTablet":0,"ctaBottomSpaceMobile":0,"imageBottomSpace":15,"titleBottomSpace":15,"metaBottomSpace":15,"excerptBottomSpace":25,"contentPaddingUnit":"px","rowGapUnit":"px","columnGapUnit":"px","excerptBottomSpaceUnit":"px","paginationSpacingUnit":"px","imageBottomSpaceUnit":"px","titleBottomSpaceUnit":"px","metaBottomSpaceUnit":"px","ctaBottomSpaceUnit":"px","paddingBtnUnit":"px","mobilePaddingBtnUnit":"px","tabletPaddingBtnUnit":"px","paddingUnit":"px","mobilePaddingUnit":"px","tabletPaddingUnit":"px","isPreview":false,"taxDivider":", ","titleLetterSpacing":"","titleLetterSpacingType":"px","metaLetterSpacing":"","metaLetterSpacingType":"px","ctaLetterSpacing":"","ctaLetterSpacingType":"px","excerptLetterSpacing":"","excerptLetterSpacingType":"px","useSeparateBoxShadows":true,"boxShadowColor":"#00000070","boxShadowHOffset":0,"boxShadowVOffset":0,"boxShadowBlur":"","boxShadowSpread":"","boxShadowPosition":"outset","boxShadowColorHover":"","boxShadowHOffsetHover":0,"boxShadowVOffsetHover":0,"boxShadowBlurHover":"","boxShadowSpreadHover":"","boxShadowPositionHover":"outset","borderWidth":"","borderStyle":"none","borderColor":"","borderRadius":"","blockName":"post-grid","equalHeight":true,"paginationBgActiveColor":"#e4e4e4","paginationActiveColor":"#333333","paginationBgColor":"#e4e4e4","paginationColor":"#777777","paginationMarkup":"","paginationLayout":"filled","paginationBorderColor":"#888686","paginationBorderSize":1,"paginationSpacing":20,"paginationAlignment":"left","paginationPrevText":"\u00ab Previous","paginationNextText":"Next \u00bb","layoutConfig":[["uagb\/post-image"],["uagb\/post-taxonomy"],["uagb\/post-title"],["uagb\/post-meta"],["uagb\/post-excerpt"],["uagb\/post-button"]],"post_type":"grid","equalHeightInlineButtons":false,"paginationType":"ajax","extended_widget_opts_block":{},"extended_widget_opts":{},"extended_widget_opts_state":"","extended_widget_opts_clientid":"","dateUpdated":""}, pageNumber, '5ecdc009');
});
});
} )();
ai_front = {"insertion_before":"BEFORE","insertion_after":"AFTER","insertion_prepend":"PREPEND CONTENT","insertion_append":"APPEND CONTENT","insertion_replace_content":"REPLACE CONTENT","insertion_replace_element":"REPLACE ELEMENT","visible":"VISIBLE","hidden":"HIDDEN","fallback":"FALLBACK","automatically_placed":"Automatically placed by AdSense Auto ads code","cancel":"Cancel","use":"Use","add":"Add","parent":"Parent","cancel_element_selection":"Cancel element selection","select_parent_element":"Select parent element","css_selector":"CSS selector","use_current_selector":"Use current selector","element":"ELEMENT","path":"PATH","selector":"SELECTOR"};