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版权协议,转载请附上原文出处链接和本声明。