牛客網---陣列中出現次數超過一半的數字
阿新 • • 發佈:2018-12-14
題目描述
陣列中有一個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入一個長度為9
的陣列{1,2,3,2,2,2,5,4,2}。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出
2。如果不存在則輸出0。
典型的回縮演算法,用Java語言比較費勁。
package 劍指offer; import org.junit.Test; import java.util.*; /** * Created by Administrator on 2018/10/12. */ public class 字串的排列 { public static ArrayList<String> Permutation(String str) { if(str==null||str.length()==0) return new ArrayList<>(); StringBuffer str1=new StringBuffer(str); HashSet<String> set=new HashSet<>(); backTrak(set,str1,0); ArrayList<String> res=new ArrayList<>(set); res.sort(new Comparator<String>() { @Override public int compare(String o1, String o2) { return o1.compareTo(o2); } }); return res; } private static void backTrak(HashSet<String> res, StringBuffer str1, int i) { if(i==str1.length()-1){ res.add(new String(str1)); return; } for(int j=i;j<str1.length();j++){ swap(str1,i,j); backTrak(res,str1,i+1); swap(str1,j,i); } } private static void swap(StringBuffer str1, int i, int j) { char tmp=str1.charAt(i); str1.setCharAt(i,str1.charAt(j)); str1.setCharAt(j,tmp); } @Test public void test(){ ArrayList<String> res=Permutation("abbc"); for(int i=0;i<res.size();i++) System.out.println(res.get(i)); } }