欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > 力扣刷题(复习版)

力扣刷题(复习版)

2024/10/25 12:16:20 来源:https://blog.csdn.net/m0_64289188/article/details/141558861  浏览:    关键词:力扣刷题(复习版)

文章目录

    • 题目:最大重复子字符串
      • 题解
    • 题目: 面试题 16.07. 最大数值
      • 题解
    • 题目: 最大字符串配对数目
      • 题解
    • 题目: 字符串中第二大的数字
      • 题解
    • 题目: 统计最大组的数目
      • 题解
    • 题目: 删除每行中的最大值
      • 题解
    • 总结

题目:最大重复子字符串

原题链接:最大重复子字符串
在这里插入图片描述

题解

方法:暴力延长word的重复次数并比较,用contains()函数

 public static int maxRepeating(String sequence, String word) {int maxRepeat = 0;StringBuilder repeatedWord = new StringBuilder(word);// 循环尝试增加word的重复次数,直到不再是子字符串while (sequence.contains(repeatedWord)) {maxRepeat++;repeatedWord.append(word);}return maxRepeat;}

题目: 面试题 16.07. 最大数值

原题链接: 面试题 16.07. 最大数值

题解

方法:通过计算两个整数差值的符号位

表达式 a * (1 - sign) + b * sign 能够实现两个值的二选一效果

 public int maximum(int a, int b) {long diff = (long)a - (long)b;long sign = (diff >>> 63) & 1;return (int)(a * (1 - sign) + b * sign);}

题目: 最大字符串配对数目

原题链接: 最大字符串配对数目
在这里插入图片描述

在这里插入图片描述

题解

public static int maximumNumberOfStringPairs(String[] words) {HashSet<String> set = new HashSet<>();int count = 0;for (String word : words) {String reversed = "" + word.charAt(1) + word.charAt(0);// 检查反转字符串是否已经存在于 set 中if (set.contains(reversed)) {count++;}set.add(word);}return count;}

题目: 字符串中第二大的数字

原题链接: 字符串中第二大的数字
在这里插入图片描述

题解

方法1:

 public static int secondHighest(String s) {Set<Integer> set = new HashSet<>();for (char c : s.toCharArray()) {if (Character.isDigit(c)) {set.add(c - '0');}}int firstMax = -1;int secondMax = -1;for (Integer i : set) {if (i > firstMax) {secondMax = firstMax;firstMax = i;} else if (i > secondMax && i < firstMax) {secondMax = i;}}return secondMax;}

方法2:
先找到最大值删除,如果set不为空,继续寻找最大值(答案)

 public static int secondHighest11(String s) {Set<Integer> set = new HashSet<>();for (char c : s.toCharArray()) {if (Character.isDigit(c)) {set.add(c - '0');}}int maxValue = -1;for (Integer i : set) {if (i > maxValue) {maxValue = i;}}set.remove(maxValue);if (set.size() == 0) return -1;maxValue = -1;for (Integer i : set) {if (i > maxValue) {maxValue = i;}}return maxValue;}

题目: 统计最大组的数目

原题链接: 统计最大组的数目
在这里插入图片描述

题解

方法:利用 map 将相同的数位和作为键(哈希表)

public static int sumDigit(int i) {int res = 0;while (i > 0) {res += i % 10;i /= 10;}return res;
}public static int countLargestGroup(int n) {int maxCnt = 0;HashMap<Integer, Integer> map = new HashMap<>();for (int i = 1; i <= n; i++) {int sum = sumDigit(i);int count = map.getOrDefault(sum, 0) + 1;map.put(sum, count);maxCnt = Math.max(maxCnt, count);}int res = 0;for (Integer value : map.values()) {if (value == maxCnt) {res++;}}return res;
}

题目: 删除每行中的最大值

原题链接: 删除每行中的最大值
在这里插入图片描述

题解

方法:通过逐列查找每一行未使用的最大值,并将其标记为已使用,然后将每列的最大值累加得到最终结果。主要利用 used 数组来跟踪已经处理过的元素

public boolean[][] used = new boolean[51][51];// 找到一行中最最大的元素  并标记已处理public int findMaxByRow(int[][] grid, int row) {int maxValue = -1;int maxIndex = -1;for (int i = 0; i < grid[0].length; i++) {if (!used[row][i] && grid[row][i] > maxValue) {maxValue = grid[row][i];maxIndex = i;}}if (maxIndex != -1) {used[row][maxIndex] = true;}return maxValue;}public int deleteGreatestValue(int[][] grid) {int res = 0;for (int j = 0; j < grid[0].length; j++) { int maxValue = -1;for (int i = 0; i < grid.length; i++) { int maxByRow = findMaxByRow(grid, i);if (maxValue < maxByRow)maxValue = maxByRow;}res += maxValue;}return res;}

总结

  1. 拿到一个题目要认真读题(建议读2遍),没思路可以看一下提示,有时候提示会给你一些解题思路的
  2. 不要被给的输入输出示例迷惑了,有时候会干扰你解题的

版权声明:

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

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