小工具知识网

当前位置: 首页 > 行业知识 > 双非二本实习前的准备day8

行业知识

双非二本实习前的准备day8

2026-11-11 07:19:43 来源:互联网转载

学习目标:

���天2-3到简单sql(刷完即止),每天复习代码随想录上的题目2-3道算法(时间充足可以继续),背诵的八股的问题也在这里记录了

()

今日碎碎念:

1)今天任务:java基础八股(不贴出来了),集合源码,MySQL,Redis八股部分

3)目前简历修改完毕

()

力扣刷题

SQL

力扣1193:1193. 每月交易 I

解答思路:

        1)看注释即可

# 找出每年的每月,按每日期和国家分组# 这里得用到日期函数DATE_FORMAT(trans_date, '%Y-%m'),可以把日期转换为指定格式# 其余的就是按照题目提示来统计即可,使用之前学到的IF来判断select         DATE_FORMAT(trans_date, '%Y-%m') as month,        country,        count(*) as trans_count,        sum(if(state = 'approved',1,0)) as approved_count,        sum(amount) as trans_total_amount,        sum(IF(state = 'approved', amount, 0)) AS approved_total_amount    from Transactions    group by month,country

力扣1174:1174. 即时食物配送 II

解答思路:

        1)这道题我的首要思路就是,找到首次订单,那么就是找到订单日期最早的,因此可以使用MIN

        2)查出拥有首次订单的用户的id和订单日期后,将这个表作为子查询结果

        3)我们最后也只需要用到子查询的这两个列,因此where in(表)肯定是少不了的

        4)接下来就是判断是即时订单,还是计划订单即可

# 首先得找到首次订单,即找到订单日期最早的select     round(        sum(order_date = customer_pref_delivery_date) * 100 / count(*)         ,2    ) as immediate_percentage     from Delivery    where (customer_id,order_date) in (        select customer_id,MIN(order_date)            from Delivery            group by customer_id        )

力扣550:550. 游戏玩法分析 IV

解答思路:

        1)这道题的难点在于进行比例的计算,以及想到日期函数-->datediff函数的使用

        2)去看评论区大神的即可

        3)这里我就简单说两句:

                3.1)这种解法只需要找到首次登录日期,因为首次登录一定是唯一的,所以找到了首次登录的用户id以及日期,其实就相当于找到了玩家的总数了,省去了又查一次表然后distinct这种操作。

                3.2)接下来就是过滤数据,将查出来的首次登录表和Activity进行左连接,找到日期差为1的用户的数据,因为是左表连接查询,所以结果条数至少为左表条数;其实根本无需关心用户到底连续登录了几天,我只需要找到连续登录两天的数据即可。

                3.3)因此,将首次登录表与Activity表连接查询是再好不过的过滤方法,过滤条件如下即可on p.player_id = a.player_id and datediff(a.event_date,p.login) = 1

                3.4)最后一步就比较简单,如果找出来的天数是不连续的,那么结果就会显示为null,因此判断一下,是null就不计算即可

# 计算从首次登录日期开始至少连续两天登录的玩家的数量,然后除以玩家总数。# 思考如何找出玩家总数select         round(            sum(if(a.event_date is not null, 1, 0)) / count(*)        ,2) as fraction    from         (            select player_id,min(event_date) as login                from Activity                group by player_id        )as p    left join Activity as a    on p.player_id = a.player_id and datediff(a.event_date,p.login) = 1

算法

力扣15:15. 三数之和

解答思路:

        1)看注释即可

class Solution {    public List threeSum(int[] nums) {        List result = new ArrayList();        //排序        Arrays.sort(nums);        //开始找三元组        for(int i = 0;i  0){                return result;            }            if (i > 0 && nums[i] == nums[i - 1]) {                  // 去重a                // 比如一个数组,-1,-1,0,1                // 此时就需要这一步来去重                continue;            }            //去找其余两个            int left = i + 1;            int right = nums.length-1;            while(left  0){                    right--;                }                //left同理                else if(sum  left && nums[right] == nums[right - 1]) right--;                    while (right > left && nums[left] == nums[left + 1]) left++;                    //指针移动,准备进入下一轮                    right--;                     left++;                }            }        }        return result;    }}

力扣383:383. 赎金信

解答思路:

       1)本题比较简单,哈希表来做即可

class Solution {    public boolean canConstruct(String ransomNote, String magazine) {        // shortcut        if (ransomNote.length() > magazine.length()) {            return false;        }        int[] cnt = new int[26];        for(int i = 0;i 

上一篇:linux服务器怎么给服务器写入权限?

下一篇:怎么登录欧美服务器地址?