力扣Day13

168、Excel表列名称

给你一个整数 columnNumber ,返回它在 Excel 表中相对应的列名称。

A -> 1
B -> 2
C -> 3
...
Z -> 26
AA -> 27
AB -> 28 

 

十进制转二十六进制 

class Solution {
    public String convertToTitle(int columnNumber) {
        if (columnNumber <= 0) {
            return "";
        }
        StringBuilder sb = new StringBuilder();
        while (columnNumber > 0) {
            columnNumber--;//现实中第一个是逻辑上的1,计算机里第一却是0。减了一,则就是从0开始了,0-25对应者'A'-'Z',就是标准的26进制了
            sb.append((char) (columnNumber % 26 + 'A'));
            columnNumber =columnNumber / 26;//每26位循环一次..
        }
        return sb.reverse().toString();
    }
}

 169、多数元素

给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。

法一: 利用哈希表

键 存放数组元素,值 存放数组元素出现的次数(通常都会把解题要的东西放在第二个位置即:值的位置)

class Solution {
    public int majorityElement(int[] nums) {
        Map<Integer,Integer>map=new HashMap<Integer,Integer>();
        for(int i:nums){
            if(!map.containsKey(i)){
                map.put(i,1);
            }else{
                map.put(i, map.get(i)+1);
            }
        }

        for(Map.Entry<Integer,Integer> entry:map.entrySet()){
            if(entry.getValue()>(nums.length/2)){
                return entry.getKey();
            }
        }
        return 0;
    }
}

法二:数学规律

排序数组中:当众数的个数大于数组的一半,那么这个众数的值一定在数组的中间

class Solution {
    public int majorityElement(int[] nums) {
        Arrays.sort(nums);
        return nums[nums.length/2];
    }
}

法三:暴力解法

class Solution {
    public int majorityElement(int[] nums) {
        int len=nums.length;
        int n=len/2;
        for(int i=0;i<len;i++){
            int count=0;
            for(int j=0;j<len;j++){
                if(nums[i]==nums[j]){
                    count++;
                }
                if(count>n){
                    return nums[i];
                }
            }
        }
        return 0;

    }
}

171、Excel 表列序号

给你一个字符串 columnTitle ,表示 Excel 表格中的列名称。返回该列名称对应的列序号。

    A -> 1
    B -> 2
    C -> 3
    ...
    Z -> 26
    AA -> 27
    AB -> 28 

 二十六进制转十进制

"AB"=1*26^1+2*26^0=26+2=28

class Solution {
    public int titleToNumber(String columnTitle) {
        int len=columnTitle.length();//"AB"
        if(len==0) return 0;
        int res=0;
        int x=0;
        for(int i=len-1;i>=0;i--){
//现实中第一个是逻辑上的1,计算机里第一却是0。
            int num=columnTitle.charAt(i)-'A'+1;//所以要+1
            res=(int) (res+num*Math.pow(26, x));
            x++;
        }
        return res;

    }
}


版权声明:本文为qq_51329170原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。