您的位置:首页 > 科技 > IT业 > 国能商旅app下载_python web页面开发_产品故事软文案例_阿里云空间+1对1私人专属设计师

国能商旅app下载_python web页面开发_产品故事软文案例_阿里云空间+1对1私人专属设计师

2024/12/22 18:04:30 来源:https://blog.csdn.net/MogulNemenis/article/details/142992807  浏览:    关键词:国能商旅app下载_python web页面开发_产品故事软文案例_阿里云空间+1对1私人专属设计师
国能商旅app下载_python web页面开发_产品故事软文案例_阿里云空间+1对1私人专属设计师

二叉树中的第K大层和

题目

2583. 二叉树中的第 K 大层和 - 力扣(LeetCode)

思路

递归计算每层的和,然后排序获得第k个最大和

代码

public long kthLargestLevelSum(TreeNode root, int k) {if (root == null) {return -1;}List<Long> list = new ArrayList<>();fun(list, root, 0);list.sort(Comparator.reverseOrder());if (list.size() < k) {return -1;}return list.get(k - 1);}private void fun(List<Long> list, TreeNode node, int k) {if (node == null) {return;}if (k >= list.size()) {list.add((long) node.val);} else {list.set(k, list.get(k) + node.val);}fun(list, node.left, k + 1);fun(list, node.right, k + 1);}

最大或值

题目

2680. 最大或值 - 力扣(LeetCode)

思路

  • leftOr 和 rightOr 数组:用于分别存储从左到右和从右到左的累积按位或结果。
    • leftOr[i] 表示从数组开头到 i 的所有元素的按位或。
    • rightOr[i] 表示从数组结尾到 i 的所有元素的按位或。
  • 计算新的按位或:
    • 对于每个元素 nums[i],它的左侧按位或结果是 left[i - 1],右侧按位或结果是 right[i + 1]。
    • 然后将 nums[i] 乘以 2 的 k 次方,得到新的数 t。
    • 将 left[i - 1]、t和 right[i + 1] 进行按位或,得到更新后的按位或结果。
  • 最大化按位或结果:
    • 对于每个元素进行操作后,更新最大的按位或结果。

代码

public long maximumOr(int[] nums, int k) {if(nums.length==0){return 0;}int[] left = new int[nums.length];int[] right = new int[nums.length];left[0]=nums[0];for(int i=1;i< nums.length;i++){left[i]=left[i-1]|nums[i];}right[nums.length - 1] = nums[nums.length - 1];for (int i = nums.length- 2; i >= 0; i--) {right[i] = right[i + 1] | nums[i];}long max = 0;for (int i=0;i< nums.length;i++) {long t = nums[i] * (1L << k);long l = i > 0 ? left[i - 1] : 0;long r = i < nums.length - 1 ? right[i + 1] : 0;long cur = l|t|r;max = Math.max(max, cur);}return max;}

美丽下标对的数目

题目

2748. 美丽下标对的数目 - 力扣(LeetCode)

思路

模拟,首先是双重遍历数组

每次遍历获取nums[i]的第一个数字,nums[j]的最后一个数字

判断是否互质,互质则sum++

代码

public int countBeautifulPairs(int[] nums) {int sum = 0,n = nums.length;for(int i=0;i<n;i++){for(int j=i+1;j<n;j++){int a = nums[i];while(a>10){a=a/10;}int b = nums[j]%10;if(gcd(a,b)){sum++;}}}return sum;}private boolean gcd(int x,int y){for(int i=2;i<=Math.min(x,y);i++){if(x%i==0&&y%i==0){return false;}}return true;}

移除字符串中的尾随零

题目

2710. 移除字符串中的尾随零 - 力扣(LeetCode)

思路

从尾部开始遍历字符串,遇到0就删除,遇到其他的直接跳出

代码

public String removeTrailingZeros(String num) {int n = num.length();StringBuilder sb = new StringBuilder(num);for(int i=n-1;i>=0;i--){if(num.charAt(i)=='0'){sb.deleteCharAt(i);}else{break;}}return sb.toString();}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com