本文共 2473 字,大约阅读时间需要 8 分钟。
我最近在做LeetCode上的题目,遇到了几个挺有意思的问题。今天我想记录一下我的思考过程和解决方案,希望能对其他人有所帮助。
这个问题是说,给定一辆车的油量和加油站的油价,判断是否可以完成一圈环游。我的理解是,车子在加油站加油后,油量足够到下一个加油站吗?如果可以,就返回当前加油站的索引,否则返回-1。
我觉得这个问题可以通过模拟油量来判断。首先,我需要确保每个加油站的油量足够支持到下一个加油站。如果有任何一个加油站不够,就跳过,继续看下一个。如果所有加油站都能支持,就返回当前加油站的索引。
这个问题需要模拟油量的消耗。对于每个加油站,我需要计算剩余的油量,看看是否可以支持到下一个加油站。如果某个加油站不够,就直接跳过。最终如果所有加油站都能支持,就返回当前加油站的索引,否则返回-1。
public int canCompleteCircuit(int[] gas, int[] cost) { for (int i = 0; i < cost.length; i++) { if (cost[i] > gas[i]) { continue; } int gasLeft = gas[i] - cost[i]; int j = (i + 1) % cost.length; while (j != i) { if (cost[j] > gas[j] + gasLeft) { break; } gasLeft += gas[j] - cost[j]; j = (j + 1) % cost.length; } if (j == i) { return i; } } return -1;}
这个问题是说,给定一副牌,判断是否存在一个特定的组数。例如,是否存在一个组数x,使得每个x的出现次数都是x的倍数。
我觉得这个问题可以通过统计每个数字的出现次数,然后计算这些次数的最大公约数来解决。如果最大公约数大于1,就说明存在这样的x,否则不存在。
首先统计每个数字的出现次数。然后计算这些次数的最大公约数。如果最大公约数大于1,就返回true,否则返回false。
public boolean hasGroupsSizeX(int[] deck) { Mapcount = new HashMap<>(); Arrays.stream(deck).forEach(a -> count.put(a, count.getOrDefault(a, 0) + 1)); int divisor = count.get(deck[0]); for (int i : count.keySet()) { divisor = gcd(divisor, count.get(i)); if (divisor == 1) { return false; } } return true;}private int gcd(int a, int b) { int temp; while (b > 0) { temp = a % b; a = b; b = temp; } return a;}
这个问题是说,给定一个字符串,删除最少的字符,使得括号是有效的。比如"()()"可以直接用,但"())("就需要删除一个括号。
我觉得可以用栈来解决这个问题。遍历字符串,遇到'('就压入栈,遇到')'就弹出栈。如果栈空了就删除当前的')',否则弹出栈。最后检查栈是否为空。
用栈来记录括号的匹配情况。遇到'('压入栈,遇到')'就弹出栈。如果栈为空了,就删除当前的')',否则弹出栈。最后检查栈是否为空,如果不为空,就需要删除栈中所有的'('。
public String minRemoveToMakeValid(String s) { StringBuilder sb = new StringBuilder(s); Stackstack = new Stack<>(); for (int i = 0; i < sb.length(); i++) { if (sb.charAt(i) == '(') { stack.push('('); } else if (sb.charAt(i) == ')') { if (stack.isEmpty()) { sb.deleteCharAt(i); i--; } else { stack.pop(); } } } int size = stack.size(); while (size > 0) { sb.deleteCharAt(sb.lastIndexOf("(")); size--; } return sb.toString();}
通过这些问题的练习,我对算法有了更深的理解,也学会了如何用不同的方法解决问题。希望这些代码和思考过程能对你有所帮助!
转载地址:http://tfee.baihongyu.com/