备战秋招013(20230809)

news/2024/7/24 3:12:44 标签: java

文章目录

  • 前言
  • 一、今天学习了什么?
  • 二、动态规划
    • 1.完全背包问题
    • 2.题目
  • 三、牛客网华为机试
    • 1、简介
    • 2、ACM
    • 2、题目
  • 三、SQL
    • 1、增删改部分
  • 总结


前言

提示:这里为每天自己的学习内容心情总结;

Learn By Doing,Now or Never,Writing is organized thinking.


提示:以下是本篇文章正文内容

一、今天学习了什么?

  • 代码随想录的动态规划部分;
  • 牛客网的华为机试

二、动态规划

1.完全背包问题

**「完全背包问题」 ** 是指,有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品都有无限个(也就是可以放入背包多次),求解将哪些物品装入背包里物品价值总和最大。

完全背包和01背包问题唯一不同的地方就是,每种物品有无限件

java">    /**
     * 完全背包问题,物品可以重复使用
     * - 由于可以重复使用,所以每次都可以从第一个物品开始判断
     */
    public static int testCompletePack(int[] weight, int[] value, int bagSize) {
        int[] dp = new int[bagSize + 1];

        for (int i = bagSize; i >= weight[0]; i--) {
            dp[i] = value[0];
        }

        for (int i = 0; i < weight.length; i++) {
            for (int j = weight[i]; j <= bagSize; j++) {
                dp[j] = Math.max(dp[j], dp[j - weight[i]] + value[i]);
            }
        }
        return dp[bagSize];
    }

2.题目

  • 494. 目标和(⭐⭐⭐⭐⭐)
java">    public int findTargetSumWays(int[] nums, int target) {
        /**
         * - 首先求出整个数组中的所有元素之和sum
         * - 可以看成将整个数组分为两部分,A和B,那么满足下面的数学关系式:
         *  A+B=sum,A-B=target
         *  那么我们只需要求出采用数组中的元素拼凑出来和为 (sum+target)/2的方法有多少
         *  - QQQ:如何看成是一个背包问题呢?
         *  - - 物品重量和价值数组都是nums,背包的所能背的容量为sum+target)/2,dp【i】代表背包价值为i时的方法数
         */
        int sum = 0;
        for (int i = 0; i < nums.length; i++) {
            sum += nums[i];
        }

        if (target < 0 && sum < -target) return 0;
        if ((sum + target) % 2 != 0) {
            return 0;
        }
        sum = (sum + target) / 2;
        if (sum < 0) {
            sum = -sum;
        }

        int[] dp = new int[sum + 1];
        dp[0] = 1;

        for (int i = 0; i < nums.length; i++) {
            for (int j = sum; j >= nums[i]; j--) {
                dp[j] += dp[j - nums[i]];
            }
        }

        return dp[sum];
    }
  • 474. 一和零
java">    public int findMaxForm(String[] strs, int m, int n) {

        /**
         * - 动态规划的背包问题,选和不选对结果的影响,dp数组含义是什么呢?
         * - 这个子集中最多能有m个0和n个1
         * - dp[i][j],代表子集中最多有i个0和j个1时的最大子集的长度
         */
        int[][] dp = new int[m + 1][n + 1];
        for (int index = 0; index < strs.length; index++) {
            int[] countZeroAndOne = countZeroAndOne(strs[index]);
            int zero = countZeroAndOne[0];
            int one = countZeroAndOne[1];
            // 遍历dp数组
            for (int i = m; i >= zero; i--) {
                for (int j = n; j >= one; j--) {
                    dp[i][j] = Math.max(dp[i][j], dp[i - zero][j - one] + 1);
                }
            }
        }

        return dp[m][n];
    }

    /**
     * 写一个函数,计算出来字符串的0和1的个数
     */
    private int[] countZeroAndOne(String s) {
        int[] res = new int[2];

        int zero = 0;
        int one = 0;
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == '0') {
                zero++;
            } else {
                one++;
            }
        }
        res[0] = zero;
        res[1] = one;

        return res;
    }
  • 518. 零钱兑换 II
java">    public int change(int amount, int[] coins) {
        /**
         * - 凑硬币的个数,完全背包问题
         * - dp[i]代表凑出总金额为i的硬币组合数
         */
        int[] dp = new int[amount + 1];
        dp[0] = 1;

        for (int i = 0; i < coins.length; i++) {
            for (int j = coins[i]; j <= amount; j++) {
                dp[j] += dp[j - coins[i]];
            }
        }

        return dp[amount];
    }


三、牛客网华为机试



1、简介


参考的是牛客网 华为机试 的内容,进行代码实现的。


2、ACM


对于传统ACM的OJ模式题目,你的程序需要stdin(标准输入)读取输入,然后stdout(标准输出)来打印结果。

ACM(OJ)模式下对于各种输入输出情况的总结(JAVA);

注意类名必须为Main, 不要有任何package xxx信息

首先对与Java的输入,要用[ Scanner ]:

java">Scanner in = new Scanner(System.in);

读取字符或行:

java">in.hasNext(); // 字符
in.hasNextLine(); // 行

采用has xxxx的话,后面也要用next xxxx。比如前面用hasNextLine,那么后面要用 nextLine 来处理输入。



2、题目



  • HJ1 字符串最后一个单词的长度
java">    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        String s =in.nextLine();
        String[] arr = s.split(" ");
        System.out.println(arr[arr.length - 1].length());
    }
  • HJ2 计算某字符出现次数
java">    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String s1 = in.nextLine();
        String s2 = in.nextLine();
        s1 = s1.toLowerCase();
        s2 = s2.toLowerCase();
        int res = 0;
        for (int i = 0; i < s1.length(); i++) {
            if (s1.charAt(i) == s2.toCharArray()[0]) {
                res++;
            }
        }
        System.out.println(res);
    }
  • HJ3 明明的随机数
java">    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int length = in.nextInt();
        // 注意 hasNext 和 hasNextLine 的区别
        TreeSet<Integer> set = new TreeSet();
        for (int i = 0; i < length; i++) { // 注意 while 处理多个 case
            int a = in.nextInt();
            set.add(a);
        }
        Iterator<Integer> iterator = set.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }
  • HJ4 字符串分隔
java">    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextLine()) {
            String s = in.nextLine();
            StringBuilder sb = new StringBuilder();
            sb.append(s);
            int length = sb.length();
            int addZero = 8 - length % 8;
            while (addZero > 0 && addZero < 8) {
                sb.append('0');
                addZero--;
            }
            String string = sb.toString();
            while (string.length() > 0) {
                System.out.println(string.substring(0, 8));
                string = string.substring(8);
            }
        }
    }
  • HJ5 进制转换
java">    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextLine()) { // 注意 while 处理多个 case
            String line = in.nextLine();
            int ans = 0;
            int length = line.length();
            // 从右到左
            for (int i = length - 1; i >= 0; i--) {
                char c = line.charAt(i);
                int b = 0;
                if (c == 'x' || c == 'X') {
                    System.out.println(ans);
                    break;
                } else if (c >= 'A' && c <= 'F') {
                    b = c - 'A' + 10;
                } else {
                    b = c - '0';
                }
                ans += (int) Math.pow(16, length - i - 1) * b;
            }
        }
    }

三、SQL

该部分的内容是参考牛客网的 SQL进阶挑战,总共含有 6 部分的内容如下所示,


1、增删改部分


「增删改操作」部分如下

  • SQL110 插入记录(一)
INSERT INTO exam_record (uid, exam_id, start_time, submit_time, score) VALUES
(1001, 9001, '2021-09-01 22:11:12', '2021-09-01 23:01:12', 90),
(1002, 9002, '2021-09-04 07:01:02', NULL, NULL);
  • SQL111 插入记录(二)
INSERT INTO exam_record_before_2021(uid, exam_id, start_time, submit_time, score)
SELECT uid, exam_id, start_time, submit_time, score
FROM exam_record
WHERE YEAR(submit_time) < '2021';
  • SQL112 插入记录(三)
java">DELETE FROM examination_info
WHERE exam_id=9003;
INSERT INTO examination_info
VALUES(NULL,9003, 'SQL','hard', 90, '2021-01-01 00:00:00')
  • SQL113 更新记录(一)
update examination_info
set tag = 'Python' where tag = 'PYTHON';
  • SQL114 更新记录(二)
UPDATE exam_record
SET submit_time='2099-01-01 00:00:00', score=0
WHERE start_time < '2021-09-01 00:00:00' AND score IS NULL;

总结

提示:这里对文章进行总结:


http://www.niftyadmin.cn/n/4926871.html

相关文章

Pytorch量化之Post Train Static Quantization(训练后静态量化)

使用Pytorch训练出的模型权重为fp32&#xff0c;部署时&#xff0c;为了加快速度&#xff0c;一般会将模型量化至int8。与fp32相比&#xff0c;int8模型的大小为原来的1/4, 速度为2~4倍。 Pytorch支持三种量化方式&#xff1a; 动态量化&#xff08;Dynamic Quantization&…

go的make使用

在 Go 语言中&#xff0c;make 是一个用于创建切片、映射&#xff08;map&#xff09;和通道&#xff08;channel&#xff09;的内建函数。它提供了一种初始化和分配内存的方式&#xff0c;用于创建具有特定长度和容量的数据结构。下面将详细介绍 make 函数的使用方法和各种情况…

nginx负载均衡(nginx结束)

本节主要内容 1、四层&#xff0c;七层代理的配置方法 2、负载均衡的算法 nginx负载均衡&#xff1a;反向代理来实现 反向代理有两种转发方式&#xff1a;1、四层代理 2、七层代理 Nginx的七层代理和四层代理 七层是最常见的反向代理方式&#xff0c;只能配置在nginx配置文…

Vue 本地应用 记事本 v-on v-model v-for使用

新增功能 vue当中如何生成列表结构&#xff1f;使用的指令是v-for&#xff0c;同时要有一个可以生成列表的数据&#xff0c;常用的是数组。记事本里面的内容并不复杂&#xff0c;所以这里使用字符串数组就行了。 获取用户输入的内容使用绑定v-model&#xff0c;双向数据绑定&a…

前沿分享-无创检测血糖RF波

非侵入性血糖仪&#xff0c;利用射频 (RF) 波连续测量血液中的葡萄糖水平。利用射频波技术连续实时监测血液中的葡萄糖水平&#xff0c;使用的辐射要比手机少得多。 大概原理是血液中的葡萄糖是具有介电特性&#xff0c;一般来说就是介电常数。 电磁波波幅的衰减反映了介质对电…

汽车IVI中控开发入门及进阶(十):车载摄像头接口CVBS、AHD和MIPI

文章目录 前言一、CVBS是什么?二、AHD是什么?三、MIPI是什么?前言 汽车电子电气架构正在由传统的分布式架构向域集中式架构转变,也就是将多个应用程序集中在一个域中,正如提到IVI,有些已经开始导入域控,除了一带多的显示屏、一带多的雷达传感器,当然还有一带多的摄像头…

低代码、逻辑、规则、数据分析、协同工具集合,解决企业不同需求

大家好&#xff0c;我是为IT部门兄弟操碎了心的“软件部长”&#xff0c;随着企业IT建设的不断发展&#xff0c;软开企服也在经历了数十年的项目中积累了丰富的经验&#xff0c;为此开始了IT软件的研发之路&#xff0c;之后就一发不可收拾。。。才有了现在出现在市面上的JVS。 …

android开发之Android 自定义滑动解锁View

自定义滑动解锁View 需求如下&#xff1a; 近期需要做一个类似屏幕滑动解锁的功能&#xff0c;右划开始&#xff0c;左划暂停。 需求效果图如下 实现效果展示 自定义view如下 /** Desc 自定义滑动解锁View Author ZY Mail sunnyfor98gmail.com Date 2021/5/17 11:52 *…