您的位置:首页 > 健康 > 美食 > 青岛发现51例阳性_北京建设网点地址查询_百度搜索引擎的网址_外贸谷歌推广怎么样

青岛发现51例阳性_北京建设网点地址查询_百度搜索引擎的网址_外贸谷歌推广怎么样

2024/12/31 1:13:14 来源:https://blog.csdn.net/MogulNemenis/article/details/142834106  浏览:    关键词:青岛发现51例阳性_北京建设网点地址查询_百度搜索引擎的网址_外贸谷歌推广怎么样
青岛发现51例阳性_北京建设网点地址查询_百度搜索引擎的网址_外贸谷歌推广怎么样

买钢笔和铅笔的方案数

题目

2240. 买钢笔和铅笔的方案数 - 力扣(LeetCode)

思路

直接模拟会时间超限,根据公式进行优化

代码

优化前

public long waysToBuyPensPencils(int total, int cost1, int cost2) {long sum = 0;while(total>=0){long ans = fun(total,Math.min(cost1,cost2),0);sum = sum + ans;total = total - Math.max(cost1,cost2);System.out.println(sum);}return sum;}private long fun(int total,int cost,int sum){sum++;if(total>=cost){return fun(total-cost,cost,sum);}return sum;}

优化后

 public long waysToBuyPensPencils(int total, int cost1, int cost2) {long n = (total/cost1)+1 , res = n;for(long i=0;i<n;i++){res = res + (total- cost1 *i)/cost2;}return res;}

字符串中最大的三位相同数

题目

2264. 字符串中最大的 3 位相同数字 - 力扣(LeetCode)

思路

我的思路是直接遍历,找出所有的三位相同数字,然后找出其中最大的。

看了别人的题解之后我发现,我简直思路太狭隘了,往往最朴素的方法最好用

代码

优化前:

 public String largestGoodInteger(String num) {char[] charArray = num.toCharArray();List<String> list = new ArrayList<>();for(int i=0;i<charArray.length;i++){if((i+3<charArray.length)&&charArray[i]==charArray[i+1]&&charArray[i+1]==charArray[i+2]){StringBuilder sb = new StringBuilder(charArray[i]);sb.append(charArray[i+1]);sb.append(charArray[i+2]);list.add(sb.toString());}}if(list.size()==0){return "";}String strLine = list.get(0);for(String str:list){if(str.compareTo(strLine)>0){strLine=str;}}return strLine;}

优化后:

public String largestGoodInteger(String num) {String[] e = {"000","111","222","333","444","555","666","777","888","999"};for(int i = 9; i >= 0; i--){if(num.indexOf(e[i]) >= 0){return e[i];}}return "";}

找出输掉零场或者一场比赛的玩家

题目

2225. 找出输掉零场或一场比赛的玩家 - 力扣(LeetCode)

思路

set集合记录所有人,用哈希表记录所有的败者以及失败次数

遍历set集合判断是否失败过,或者失败次数为1,添加进对应的集合

最后才排序

代码

public List<List<Integer>> findWinners(int[][] matches) {Map<Integer, Integer> answer2 = new HashMap<>();Set<Integer> answer = new TreeSet<>();for (int[] mt : matches) {answer.add(mt[0]);answer.add(mt[1]);answer2.put(mt[1], answer2.getOrDefault(mt[1], 0) + 1);}List<Integer> a1 = new ArrayList<>();List<Integer> a2 = new ArrayList<>();for (Integer a : answer) {if (answer2.getOrDefault(a, 0) == 1) {a2.add(a);} else if (answer2.getOrDefault(a, 0) == 0) {a1.add(a);}}List<List<Integer>> result = new ArrayList<>();result.add(a1);result.add(a2);return result;}

拓展

 这里正好讲一下HashSet,LinkedHashSet和TreeSet

详见:HashSet、LinkedHashSet 和 TreeSet-CSDN博客

  1. HashSet:HashSet可以保证唯一性,但是不能保证有序
  2. LinkedHashSet:既可以保证不重复,又能保持元素插入时的顺序。
  3. TreeSet:基于红黑树,能够自动对元素进行排序,并保证元素的唯一性。因此,使用 TreeSet 可以确保集合中的元素从小到大排序,同时每个元素都是唯一的。

版权声明:

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

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