【数组】移动所有球到每个盒子所需的最小操作数
创始人
2024-03-14 19:09:45
0

1.题目描述

给你一个混合字符串 s ,请你返回 s 中 第二大 的数字,如果不存在第二大的数字,请你返回 -1 。

混合字符串 由小写英文字母和数字组成。

示例 1:

输入:s = "dfa12321afd"
输出:2
解释:出现在 s 中的数字包括 [1, 2, 3] 。第二大的数字是 2 。

2.解题思路

这里我们使用2种思路来解决上述问题:第一种使用max和secondMax来解决,secondMax代表第二大;第二种使用一个数组,然后从后往前遍历。

2.1.方案1

解决思路:

  • 准备max和secondMax;
  • 遍历数组
    • 遍历时case1,如果数组中的元素c比max大,则执行secondMax=max,max=c;
    • 遍历时case2,如果数组中的元素c比max小,则执行secondMax= Math.max(secondMax, c);
  • 最后返回:secondMax

代码实现如下:

class Solution {public int secondHighest(String s) {char[] arr = s.toCharArray();int max = -1;int secondMax = -1;for (char c : arr) {if (Character.isDigit(c)) {if (max < (c - '0')) {secondMax = max;max = c - '0';} else if(max > (c - '0')) {secondMax = Math.max(secondMax, c - '0');}}}return secondMax;}
}

2.2.方案2

解决思路:

  • 准备数组int[] value = new int[10];
  • 遍历s,如果是数字,则执行value[c-'0']++;
  • 最后从9到0开始遍历,第二次出现的value[i]就是我们要的结果
    public int secondHighest(String s) {int[] value = new int[10];for (char c : s.toCharArray()) {if (c >= '0' && c <= '9') {value[c - '0']++;}}int count = 0;for (int i = 9; i >= 0; i--) {if (value[i] > 0) {count++;}if (count >= 2) {return i;}}return -1;}

3.总结

这里我们用了2种解法,第一种解法是标准解决方法,思路明确;第二种解法有些取巧的感觉,但是给我们提供了一套新的思路,并且执行效率也特别高。

相关内容

热门资讯

意大利要求Meta暂停禁止竞争... 意大利已下令Meta公司暂停其禁止企业在WhatsApp上使用商业工具提供自家AI聊天机器人的政策。...
山西证券(002500)披露现... 截至2025年12月25日收盘,山西证券(002500)报收于6.11元,较前一交易日上涨0.33%...
瑞典北部发生暴力犯罪事件,多人... 斯德哥尔摩消息:据瑞典媒体报道,25日圣诞节当天,瑞典北部布登市中心城区发生一起暴力犯罪事件,多人受...
博世科及子公司累计新增诉讼、仲... 12月25日,博世科(300422)发布公告,自2025年7月29日至2025年12月24日,公司及...
阳泉市郊区靶向发力精准落实低保... “民生无小事,枝叶总关情。”群众的“急难愁盼”就是监督的发力点。山西省阳泉市郊区纪委监委、阳泉市郊区...
公开背刺?亨特·拜登批评其父移... 亨特·拜登,美国前总统乔·拜登之子,在一档新播出的访谈节目中,就其父亲宽松的移民政策以及从阿富汗撤军...
倍轻松因涉嫌违反证券法律法规等... 证券之星消息,12月26日倍轻松公开信息显示,深圳市倍轻松科技股份有限公司,董事长马学军因涉嫌违反证...
22岁小伙深夜在河边喝酒落水溺... 小伙高某晚上跟3个朋友在饭店喝酒,之后跟其中两人到大渡口边继续喝酒聊天期间不幸溺亡。事后,家属将共同...
中粮糖业(600737)披露修... 截至2025年12月25日收盘,中粮糖业(600737)报收于17.41元,较前一交易日上涨0.87...