一、力扣
1、统计好子数组的数目

java
class Solution {
public long countGood(int[] nums, int k) {
long res=0;
int count=0;
int left=0;
Map<Integer,Integer> map=new HashMap<>();
for(var e:nums){
count+=map.getOrDefault(e,0);
map.merge(e,1,Integer::sum);
while(count>=k){
count=count-map.get(nums[left])+1;
map.merge(nums[left],-1,Integer::sum);
left++;
}
res+=left;
}
return res;
}
}
2、指定日期的产品价格


sql
select p1.product_id, ifnull(p2.new_price, 10) as price
from (
select distinct product_id
from products
) as p1 -- 所有的产品
left join (
select product_id, new_price
from products
where (product_id, change_date) in (
select product_id, max(change_date)
from products
where change_date <= '2019-08-16'
group by product_id
)
) as p2 -- 在 2019-08-16 之前有过修改的产品和最新的价格
on p1.product_id = p2.product_id
3、连续出现的数字

sql
select distinct a.num ConsecutiveNums
from Logs a,Logs b,Logs c
where a.id=b.id-1
and b.id=c.id-1
and a.num=b.num
and b.num=c.num
4、二叉树中的最大路径和

java
class Solution {
int res=0;
public int maxPathSum(TreeNode root) {
res=root.val;
dfs(root);
return res;
}
public int dfs(TreeNode root){
if(root==null) return 0;
int left=Math.max(dfs(root.left),0);
int right=Math.max(dfs(root.right),0);
res=Math.max(res,left+right+root.val);
return Math.max(left,right)+root.val;
}
}
5、字符串转换整数

java
public class Solution {
public int myAtoi(String str) {
char[] chars = str.toCharArray();
int n = chars.length;
int idx = 0;
while (idx < n && chars[idx] == ' ') {
// 去掉前导空格
idx++;
}
if (idx == n) {
//去掉前导空格以后到了末尾了
return 0;
}
boolean negative = false;
if (chars[idx] == '-') {
//遇到负号
negative = true;
idx++;
} else if (chars[idx] == '+') {
// 遇到正号
idx++;
} else if (!Character.isDigit(chars[idx])) {
// 其他符号
return 0;
}
int ans = 0;
while (idx < n && Character.isDigit(chars[idx])) {
int digit = chars[idx] - '0';
if (ans > (Integer.MAX_VALUE - digit) / 10) {
// 本来应该是 ans * 10 + digit > Integer.MAX_VALUE
// 但是 *10 和 + digit 都有可能越界,所有都移动到右边去就可以了。
return negative? Integer.MIN_VALUE : Integer.MAX_VALUE;
}
ans = ans * 10 + digit;
idx++;
}
return negative? -ans : ans;
}
}
6、 最长有效括号




java
public int longestValidParentheses(String s) {
int maxans = 0;
Stack<Integer> stack = new Stack<>();
stack.push(-1);
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == '(') {
stack.push(i);
} else {
stack.pop();
if (stack.empty()) {
stack.push(i);
} else {
maxans = Math.max(maxans, i - stack.peek());
}
}
}
return maxans;
}
7、零钱兑换

java
class Solution {
public int coinChange(int[] coins, int amount) {
int n=coins.length;
int[][] dp=new int[n+1][amount+1];
Arrays.fill(dp[0],Integer.MAX_VALUE/2);
dp[0][0]=0;
for(int i=0;i<n;i++){
for(int j=0;j<=amount;j++){
if(coins[i]>j){
dp[i+1][j]=dp[i][j];
}else{
dp[i+1][j]=Math.min(dp[i][j],dp[i+1][j-coins[i]]+1);
}
}
}
return dp[n][amount]==Integer.MAX_VALUE/2?-1:dp[n][amount];
}
}