思路:先排序,维护全局最小差,遍历排序后的数组更新最小差。
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; } }
第一题 TreeIV https://ac.nowcoder.com/acm/contest/9004/B
思路: 逐层等差数列求和,注意整数越界的问题。
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; } }
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(); } }