2016年搜狗笔试第二题 火眼金睛 实现源码

来源:互联网 发布:windows live无法安装 编辑:程序博客网 时间:2024/04/29 23:21
package myTest;import java.util.Arrays;import java.util.HashSet;import java.util.Set;public class Main3 {public static int[][]Array;//用来记录二维数组public static int[]userids;// 用来记录所有的用户id信息public static int getIndex(int id)//获取对应的下标{     int index=0;     for(index=0;index<userids.length;index++)     {     if(userids[index]==id)     {     return index;     }     }     return index;}public  static  int [] getArray(Set<Integer> set)//去重{int size=set.size();int []arr=new int[size];int index=0;for(Integer s:set ){  arr[index]=s;  index++;}Arrays.sort(arr);//排序return arr;}public static void mark(int [] array)//做{int firstID=array[0];int firstIndex=getIndex(firstID);for(int j=1;j<array.length;j++){int otherID=array[j];int otherIndex=getIndex(otherID);Array[firstIndex][otherIndex]=1;}} public static void main(String[] args) {int [][]array={{101,102,103},{102,101},{103}};Set<Integer> set=new HashSet();for(int i=0;i<array.length;i++){int []arr2=array[i];   for(int j=0;j<arr2.length;j++)   {   set.add(arr2[j]);//去重操作   }}userids= getArray(set);int s=userids.length;Array=new int[s][s];for(int i=0;i<array.length;i++){int []arr2=array[i];    mark(arr2);//做标记}Set <Integer> lieSet=new HashSet();//标记作弊人员for(int i=0;i<Array.length;i++){int []arr2=Array[i];for(int j=0;j<=i;j++)//遍历一半就可以{if(Array[i][j]==1&&(Array[i][j]==Array[j][i])){int fromUID=userids[i] ;int toUID=userids[j];System.out.println("作弊人员:"+fromUID+","+toUID);lieSet.add(fromUID);lieSet.add(toUID);        for(int k=0;k<s;k++)//i,j行对应的某一列也是1,则该列也为作弊用户        {             if(Array[i][k]==1&&(Array[j][k]==Array[i][k]))//找到第三个作弊的用户             {             int thirdUID=userids[k];             lieSet.add(thirdUID);             }        }}//System.out.print(Array[i][j]+" ");}System.out.println();}System.out.println("------------作弊人员----------------");for(Integer t:lieSet){System.out.print(t+",");}}}

0 0
原创粉丝点击