zoukankan      html  css  js  c++  java
  • lua里面求int数组的union,diff,inter,distinct 方法实现

      1 --利用lua中的table是哈希表这一点进行计算
      2 function lua_distinct_union (union_t1,union_t2)
      3     if(union_t2==nil) then
      4         union_t2={};
      5     end;
      6     local result={};
      7     for k,v in pairs(union_t1) do
      8         result[v]=v;
      9     end;
     10     for k,v in pairs(union_t2) do
     11         if result[v] ==nil then
     12             result[v]=v;
     13         end;
     14     end;
     15     union_t1=nil;
     16     union_t2=nil;
     17     return result;
     18 end;
     19 
     20 function lua_distinct (distinct_t)
     21     local result={};
     22     for k,v in pairs(distinct_t) do
     23         if(result[v]==nil) then
     24         result[v]=v;
     25     end;
     26 end;
     27 distinct_t=nil;
     28 return result;
     29 end;
     30 
     31 function lua_distinct_diff(diff_t1,diff_t2) local result={};
     32     for k,v in pairs(diff_t1) do
     33         if(result[v]==nil) then
     34         result[v]=v;
     35     end;
     36 end;
     37 
     38 for k,v in pairs(diff_t2) do
     39     if(result[v]~=nil) then
     40     table.remove(result,v);
     41 end;
     42 end;
     43 diff_t1=nil;
     44 diff_t2=nil;
     45 return result;
     46 end;
     47 
     48 function lua_distinct_inter (inter_t1,inter_t2)
     49     if inter_t1==nil and inter_t2~=nil then
     50         return lua_distinct(inter_t2);
     51     end;
     52     if inter_t1~=nil and inter_t2==nil then
     53         return lua_distinct(inter_t1);
     54     end;
     55     local temp1={};
     56     local temp2={};
     57     local result={};
     58     local num1=0;
     59     local num2=0;
     60     for k,v in pairs(inter_t1) do
     61         if(temp1[v]==nil) then
     62             temp1[v]=v;
     63             num1=num1+1;
     64         end;
     65     end;
     66     for k,v in pairs(inter_t2) do
     67         if(temp2[v]==nil) then
     68             temp2[v]=v;
     69             num2=num2+1;
     70         end;
     71     end;
     72     inter_t1=nil;
     73     inter_t2=nil;
     74     if num1<num2 then
     75         for k,v in pairs(temp1) do
     76             if temp2[k]~=nil then
     77                 result[k]=temp1[k];
     78             end;
     79         end;
     80     else
     81         for k,v in pairs(temp2) do
     82             if temp2[k]~=nil then
     83                 result[k]=temp1[k];
     84             end;
     85         end;
     86     end;
     87     temp1=nil;
     88     temp2=nil;
     89     return result;
     90 end;
     91 
     92 
     93 function lua_distinct_union_multiply(tablesneedunion)
     94     if(tablesneedunion==nil or #(tablesneedunion)==0) then
     95         error('lua_distinct_diff_Multiply传入参数为空');
     96     end;
     97     local result=tablesneedunion[1];
     98     if #(tablesneedunion)==1 then
     99         return lua_distinct_union(result,nil);
    100     end;
    101     for i=2,#(tablesneedunion) do
    102         local tmp=tablesneedunion[i];
    103         result=lua_distinct_union(tmp,result);
    104     end;
    105     tablesneedunion=nil;
    106     return result;
    107 end;
    108 
    109 
    110 
    111 function lua_distinct_inter_multiply(tablesneedinter)
    112     if(tablesneedinter==nil or #(tablesneedinter)==0) then
    113     error('lua_distinct_inter_multiply传入参数为空');
    114     end;
    115     local result=tablesneedinter[1];
    116     if #(tablesneedinter)==1 then
    117         return lua_distinct_inter(result,nil);
    118     end;
    119     for i=2,#(tablesneedinter) do
    120         local tmp=tablesneedinter[i];
    121         result=lua_distinct_inter(tmp,result);
    122         if  #(result)==0 then
    123             break;
    124         end;
    125     end;
    126     tablesneedinter=nil;
    127     return result;
    128 end;
    129 
    130 function getidsfromkeyvaluepair(keyvaluepair)
    131     local result={};
    132     if(keyvaluepair==nil) then
    133         return result;
    134     end;
    135     local num=1;
    136     for k,v in pairs(keyvaluepair) do
    137         result[num]=v;
    138         num=num+1;
    139     end;
    140     return result;
    141 end;
    142 
    143 function lua_getfinalids(structs)
    144     if #(structs)==1 then
    145         return getidsfromkeyvaluepair(temptable);
    146     end;
    147     local temptable=structs[1].temptable;
    148     for i=2,#(structs) do
    149         local tmp2=structs[i].temptable;
    150         if structs[i-1].flag==0 then
    151             temptable=lua_distinct_union(temptable,tmp2);
    152         else
    153             temptable=lua_distinct_inter(temptable,tmp2);
    154         end;
    155     end;
    156     return getidsfromkeyvaluepair(temptable);
    157 end;
    158 
    159 
    160 function lua_sortandtake(tableneedsort,takecount,isasc)
    161     if isasc==true then 
    162         table.sort(tableneedsort);
    163     else 
    164         table.sort(tableneedsort,function(a,b) return a>b end );
    165     end;    
    166     local result={};
    167     for i=0 ,takecount do
    168         result[i]=tableneedsort[i];    
    169     end;
    170     return result;
    171 end;
  • 相关阅读:
    友链
    CF496E Distributing Parts(贪心)题解
    CF786C Till I Collapse(根号分治)题解
    CF578B "Or" Game(贪心)题解
    CF433C Ryouko's Memory Note(贪心)题解
    Luogu4177 [CEOI2008]order(网络流)题解
    骗分专辑
    CF718A Efim and Strange Grade(贪心)题解
    prufer序列--学习笔记
    bzoj3450 Tyvj1952 Easy(期望DP)题解
  • 原文地址:https://www.cnblogs.com/fengxiaoling/p/5117181.html
Copyright © 2011-2022 走看看