牛客网---数组中出现次数超过一半的数字

题目描述
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为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));
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值