欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

牛客编程巅峰赛S1第6场-整理

程序员文章站 2022-06-15 19:35:55
...

前言:7月份开始参加牛客编程赛,难度适中,希望每次可以好好对待并整理下来,做到每次完成及时整理。小菜鸟不对的地方还请大家指正

  1. 循环右移
    牛客编程巅峰赛S1第6场-整理
import java.util.*;
 
 
public class Solution {
    /**
     * 位移后二进制串的十进制值
     * @param str string字符串 二进制字符串
     * @param k int整型 循环位移次数
     * @return long长整型
     */
     //思路:该循环右移,即将前面的k个字符放到后面拼接,注意点即k的大小
    public long rotateRight (String str, int k) {
        // write code here
        long res = 0;
        int len = str.length();
        k = k%len;
       
        String pre = str.substring(0,len-k);
        String next = str.substring(len-k,len);
        StringBuilder sb = new StringBuilder();
        sb.append(next);
        sb.append(pre);
        //计算值
        int digit = 0;//次方
        for(int i=len-1;i>=0;i--){
            if(sb.charAt(i)=='1'){
                res+=(long)(Math.pow(2,digit));
            }
            digit++;
        }
        return res;
    }
}

  1. 牛牛爱奇数
    牛客编程巅峰赛S1第6场-整理
import java.util.*;
 
 
public class Solution {
    /**
     * 返回一个数,代表让这些数都变成奇数的最少的操作次数
     * @param n int整型 代表一共有多少数
     * @param a int整型一维数组 代表n个数字的值
     * @return int整型
     */
     //思路:无需要考虑相同的数字个数,其实整个考虑的是当前有多少个偶数类别,将他们转换的次数叠加,但是在整个过程中会出现重复,比如16,32,先操作32会产生16,则从大数开始考虑==>这里可以使用TreeSet
    public int solve (int n, int[] a) {
        // write code here
        TreeSet<Integer> set = new TreeSet<Integer>();
        for(int i=0;i<n;i++){
            if(a[i]%2==0){
                set.add(a[i]);
            }
        }
        //此时Set
        int res = 0;
        while(!set.isEmpty()){
            //取出最大的数字;
            int tmp = set.last();//目前最大的元素
            set.remove(tmp);//删除该元素
            tmp = tmp/2;
            res++;
            //再将其添加上,如果存在会覆盖
            if(tmp%2==0){
                set.add(tmp);
            }
        }
        return res;
         
    }
}


  1. 牛牛摆放花
    牛客编程巅峰赛S1第6场-整理
import java.util.*;
 
 
public class Solution {
    /**
     * 返回按照这些花排成一个圆的序列中最小的“丑陋度”
     * @param n int整型 花的数量
     * @param array int整型一维数组 花的高度数组
     * @return int整型
     */
     //思路:贪心做法,要想最终的最大差距最小,对于每一盆花来说,可以选取高度最近的花作为摆放后的邻居,则最后可以使得最终的的结果最小
    public int solve (int n, int[] array) {
        Arrays.sort(array);
        int res = -1;
        for(int i=0;i<n-2;i++){
            res = Math.max(res,array[i+2]-array[i]);
        }
        res = Math.max(res,array[n-1]-array[n-2]);
        res = Math.max(res,array[1]-array[0]);
        return res;
    }
}