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

  • Post author:
  • Post category:其他


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

  1. 循环右移

    在这里插入图片描述
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. 牛牛爱奇数

    在这里插入图片描述
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. 牛牛摆放花

    在这里插入图片描述
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;
    }
}



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