牛客巅峰赛S2青铜白银组 第一场

最小差值

https://ac.nowcoder.com/acm/contest/9004/A

思路:先排序,维护全局最小差,遍历排序后的数组更新最小差。
import java.util.*;
public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 求最小差值
     * @param a int整型一维数组 数组a
     * @return int整型
     */
    public int minDifference (int[] a) {
        // write code here
        Arrays.sort(a);
        int res = 0x7fffffff;
        for(int i = 0; i < a.length - 1; ++i){
            res = Math.min(a[i + 1] - a[i], res);
        }
        return res;
    }
}

思路: 逐层等差数列求和,注意整数越界的问题。
import java.util.*;
public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 
     * @param n long长整型 表示标准完全二叉树的结点个数
     * @return long长整型
     */
    public long tree4 (long n) {
        // write code here
        if(n <= 0){return 0;}
        long res = 0, i = 1, layer = 1;
        while(i <= n){
            if((i << 1) - 1 <= n){
                res = (res + (layer * (3 * i - 1) * i / 2)) % 998244353;
                i <<= 1;
            }else{
                for(; i <= n;++i){
                    res = (res + i * layer) % 998244353;
                }
            }
            ++layer;
        }
        return res;
    }
}

第三题:字符串加法  https://ac.nowcoder.com/acm/contest/9004/C
import java.util.*;
public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 返回最大和的字符串
     * @param x string字符串 即题目描述中所给字符串
     * @param k int整型 即题目描述中所给的k
     * @return string字符串
     */
    public String Maxsumforknumers (String x, int k) {
        // write code here
        char[] arr = x.toCharArray();
        int len = arr.length;
        Arrays.sort(arr);
        String newX = new String(arr);
        String temp = newX.substring(k - 1, len);
        int carry = 0;
        for(int i = 0; i < k - 1; ++i){
            carry += arr[i] - '0';
        }
        char[] charRes = temp.toCharArray();
        int maxLen = charRes.length;
        for(int i = 0; i < maxLen && carry > 0; ++i){
            int digit = carry + charRes[i] - '0';
            carry = digit / 10;
            charRes[i] = (char)(digit % 10 + '0');
        }
        StringBuilder sb = new StringBuilder(new String(charRes));
        while(carry > 0){
            sb.append((char)(carry % 10 + '0'));
            carry /= 10;
        }
        return sb.reverse().toString();
    }
}



全部评论

相关推荐

jack_miller:我给我们导员说我不在这里转正,可能没三方签了。导员说没事学校催的时候帮我想办法应付一下
点赞 评论 收藏
分享
joe2333:怀念以前大家拿华为当保底的日子
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务