当前位置: 首页 > news >正文

HOT100打卡—day10—【DP+多维DP】—最新8.29(剩6题)

DP


1 70. 爬楼梯

70. 爬楼梯

一次做,AC代码:

疑问:怎么判断用搜索还是dp?这题,我没有受过dp训练所以第一反应是用dfs搜索,找到所有符合要求的叶子。

class Solution {
public:int dp[50];    // step1:含义: 对于下标i  有多少种方案到第i层/*step2:状态转移方程 dp[i] = dp[i-2] + dp[i-1]step3: dp数组初始化 dp[1] = 1 , dp[2] = 2step4: 遍历顺序 i递增step5: 模拟 1,2,3(1 1 1 + 2 1 +1 2 ),5*/ int climbStairs(int n) {// 这题我的第一感觉是搜索 什么时候用dp????dp[1] = 1;dp[2] = 2;for(int i = 3; i <= n; i++)dp[i] = dp[i-1] + dp[i-2];return dp[n];}
};

2 118. 杨辉三角

118. 杨辉三角

简单,AC:

class Solution {
public:vector<vector<int>> ans;vector<vector<int>> generate(int numRows) {vector<int> tmp;tmp.push_back(1);ans.push_back(tmp);if(numRows == 1)return ans;tmp.clear();tmp.push_back(1);tmp.push_back(1);ans.push_back(tmp);if(numRows == 2)return ans;for(int i = 3; i <= numRows;i++){tmp.clear();tmp.push_back(1);for(int j = 0; j < ans[ans.size()-1].size()-1;j++){tmp.push_back(ans[ans.size()-1][j] + ans[ans.size()-1][j + 1]);}tmp.push_back(1);ans.push_back(tmp);}return ans;}
};

3 198. 打家劫舍

198. 打家劫舍

就按照五部曲思考,AC代码:

class Solution {
public:int dp[120]; // 从左往右偷  偷到第i个房子(不包含本房子)时候已经赚了的最多钱/*dp[i] = max(dp[i-1] + 0,dp[i-2]+nunms[i-2])dp[0] = 0dp[1] = 0升序模拟 样例2=== 0 0 2 7 11*/int rob(vector<int>& nums) {dp[0] = 0;dp[1] = 0;if(nums.size() == 1)return nums[0];int i = 2;for(; i < nums.size();i++)dp[i] = max(dp[i-1] + 0,dp[i-2]+nums[i-2]);return max(dp[i-1] + nums[i - 1],dp[i-2]+nums[i-2]);  // 这里的return 和状态转移方程不太一样}
};

4 279. 完全平方数

279. 完全平方数

之前没学多重背包之前看到题目是蒙的,现在学完完全背包很自然就做出来了,AC代码:

class Solution {
public:int dp[10010];  // dp[1]表示 凑成i的完全平方数最少需要的数目/*转成完全背包物品:i = 1....sqrt(n)背包:ndp[j] = min(dp[j- i]+1,dp[j])装i   不撞idp[0] = 0 其他非0下标全设为INT_MAXi++j++模拟——*/int numSquares(int n) {dp[0] = 0;for(int j = 1; j <= n; j++)dp[j] = INT_MAX;for(int i = 1; i*i <= n; i++){for(int j = 0; j <= n; j++){if(j >= i*i)dp[j] = min(dp[j- i*i]+1,dp[j]);else dp[j] = dp[j];}// for(int j = 0; j <= n; j++) cout << dp[j] << ' ';// puts("");}return dp[n];}
};

5 518. 零钱兑换 II + 322. 零钱兑换

518. 零钱兑换 II

根据上面学的理论,一次AC代码:

class Solution {
public:int dp[5005];   // 能正好装满i的背包的方式数目/*dp[j] += dp[j - coins[i]];dp[0] = 1;i++ j++模拟——*/int change(int amount, vector<int>& coins) {dp[0] = 1;for(int i = 0; i < coins.size(); i++)for(int j = 0; j <= amount; j++)if(j >= coins[i])dp[j] += dp[j - coins[i]];return dp[amount];}
};

322. 零钱兑换

类似的一题:

class Solution {
public:long long dp[10005];   // 能正好装满i的背包的最少硬币个数/*dp[j] = min(dp[j],dp[j - coins[i]] + 1)不装i  装idp[0] = 0;其他非0下标初始化为INT_MAXi++ j++模拟——0 1 2 3 4 5 6 7 8 9 10 11 0 1 1 2 2 3 3 4 4 5 5 6 0 1 1 2 2 1 2 2 3 3 2 3 */int coinChange(vector<int>& coins, int amount) {dp[0] = 0;for(int i = 1; i <= amount; i++)dp[i] = INT_MAX;for(int i = 0; i < coins.size(); i++){for(int j = 0; j <= amount; j++)if(j >= coins[i])dp[j] = min(dp[j],dp[j - coins[i]] + 1);// for(int j = 0; j <= amount; j++)cout << dp[j] << ' ';// cout << endl;}if(dp[amount] == INT_MAX)return -1;else return dp[amount];}
};

6 139. 单词拆分

139. 单词拆分

做了很久...估计2h 一开始我的思路卡死了 + 看题解之后的思路的详解见注释,

我的写法和carl 答案在一些微小的细节上略有不同,我的更好理解,但他的解法更简单。

我写的过程中,需要注意下标和字符串大小的关系要不要+1-1,而且dp[] 需要从1开始到n有意义,dp[0] 不管它。不可以只有0,...,n-1 这样会忽略s = "a" Dict = ["b"] 这样的样例,因为dp[0] 恒为1。

AC代码:

class Solution {
public://多重背包且排列/*一开始我的思路——物品:字典里面str背包:容量为?的背包  求装满时候的情况dp[wordDict.size()][s.size()]如果n = wordDict.size() m = s.size()  又感觉要考虑每个字符和Dict中每个字符串的关系 很麻烦        *//*看了题解,才知道我纠结的地方 每个字符和Dict中每个字符串的关系 很麻烦,但其实可以用substr函数考虑背包的s的子串和Dict中每个字符串来比较,这样就变得很简单了。而且之前思考时候不知道dp[]存的值要是int还是char什么东西其实就题目结果反推,dp[] = trur/flase*/bool dp[310];   //以i结尾的字符串是否可以利用字典中出现的单词拼接出来/*dp[j] = dp[j - wordDict[i].size()] && substr(s,j - wordDict[i].size(),wordDict[i].size()) == wordDict[i];dp[0] = 1;多重背包+排列背包j++ 物体i++模拟——6 7 8 9 10 11j = 11 size = 5 dp[6]*/bool wordBreak(string s, vector<string>& wordDict) {dp[0] = 1;bool tmp[100][100];for(int j = 0; j <= s.size();j++){for(int i = 0; i < wordDict.size();i++){if(j == wordDict[i].size())  // 能装下一个dp[j] =  (s.substr(j  - wordDict[i].size(),wordDict[i].size()) == wordDict[i]) || dp[j];else if(j > wordDict[i].size() )    // 能至少装2个 dp[j] = dp[j  - wordDict[i].size()] && (s.substr(j - wordDict[i].size(),wordDict[i].size()) == wordDict[i]) || dp[j];}}// for(int i = 0; i < wordDict.size();i++)// {//     for(int j = 0; j < s.size();j++)//         cout << tmp[i][j] << ' ';//     cout << endl;// }return dp[s.size() ];}
};

7

8

9 01背包应用题——416. 分割等和子集

416. 分割等和子集

一开始看到题目,想用贪心——排序+双指针 每次都把当前相对小的放进小的sum中,写完之后发现过不了:[1,1,2,2]这样的样例。错误代码:

class Solution {
public:/*左边的sum 小于 右边的sum l++,左边的sum+=左边的sum 大于 同理如果等于左边前进 1,2,3,4, 5,6,7,8,9, 10*/bool canPartition(vector<int>& nums) {// 解法1:排序+双指针if(nums.size() == 1)return 0;sort(nums.begin(),nums.end());int l = 0;int r = nums.size() - 1;int leftsum = 0;int rightsum = 0;while(l <= r){if(leftsum <= rightsum){leftsum += nums[l++];}else{rightsum += nums[r--];}}cout << l << "  " << r << endl;cout << leftsum << "  " << rightsum;if(leftsum == rightsum)return 1;else return 0;}
};

要明确本题中我们要使用的是01背包,因为元素我们只能用一次。

回归主题:首先,本题要求集合里能否出现总和为 sum / 2 的子集。

那么来一一对应一下本题,看看背包问题如何来解决。

只有确定了如下四点,才能把01背包问题套到本题上来。

  • 背包的体积为sum / 2
  • 背包要放入的商品(集合里的元素)重量为 元素的数值,价值也为元素的数值
  • 背包如果正好装满,说明找到了总和为 sum / 2 的子集。
  • 背包中每一个元素是不可重复放入。

具体分析过程见注释, AC代码:

class Solution {
public:// 找到一个背包 能够装nums.total(所有物体重量总和)/2的东西int dp[10005];    // 容积为i的背包 根据现有的物体重量情况最多能装的物体的重量/*转换成01背包问题:假设有一个nums.total/2的背包有若干个物体,每个物体的重量就是nums[i] 本题可以舍弃价值这个概念就是问一个nums.total/2的背包最多能够装的物体的重量是多少 能不能达到nums.total/2if(j < nums[i])dp[j] = dp[j];else dp[j] = max(dp[j] , dp[j - nums[i]]+nums[i]);dp[0] = 0;其他默认是0for物体i++ for容积j--模拟——*/bool canPartition(vector<int>& nums) {dp[0] = 0;int total = 0;for(auto i : nums)total += i;if(total % 2 == 0)total /= 2;else return 0;for(int i = 0; i < nums.size();i++){for(int j = total ; j >= 0; j--){if(j < nums[i])dp[j] = dp[j];else dp[j] = max(dp[j] , dp[j - nums[i]]+nums[i]);}}if(dp[total] == total)return 1;else return 0;}
};

10

多维DP


1 62. 不同路径

62. 不同路径

自己试着写写,二维dp数组,还是五步曲,AC代码:

class Solution {
public:int dp[105][105];//  (i,j) 表示到达这个格子最多几条不同的路径/*状态转移:dp[i][j] = dp[i-1][j] + dp[i][j-1];dp数组初始化(初始化 第一行和第一列)dp[0][0] = 0dp[0][x] = 1dp[x][0] = 1顺序:for(i++)中for(j++)模拟一下2*30 1 11 2 3*/int uniquePaths(int m, int n) {// 原来 用dp 不用搜索 是因为怕超时dp[0][0] = 0;for(int i = 1; i < n; i++)dp[0][i] = 1;for(int i = 1; i < m; i++)dp[i][0] = 1;for(int i = 1; i < m;i++)for(int j = 1; j < n; j++)dp[i][j] = dp[i-1][j] + dp[i][j-1];if(m == 1 && n == 1)return 1;  // 特殊处理return dp[m-1][n-1];}
};

1.2 63. 不同路径 II(有障碍物版本的上一题)

63. 不同路径 II

有障碍物就是加一堆if-else ,自己写的 ,然后debug半天很多边界通过反复提交才试出来,比如:

if(m == 1 && n == 1)return obstacleGrid[0][0] ^ 1;  // 因为dp[0]设置为0  所以要特殊处理

if(obstacleGrid[0][0] || obstacleGrid[n-1][m-1] || dp[n-1][m-1] == -1)return 0;  //特殊处理起点有障碍物 、终点有障碍物、 终点不可达(三种情况)

AC代码:

class Solution {
public:int dp[105][105];//  (i,j) 表示到达这个格子最多几条不同的路径 -1表示不可达/*状态转移:if(obs[i-1][j] == 0 && dp[i-1][j] != -1)  // 上一个不是障碍物且可达dp[i][j] += dp[i-1][j]if(obs[i][j-1] == 0 && dp[i][j-1] != -1)  // 左边一个不是障碍物且可达dp[i][j] += dp[i][j-1]if((obs[i-1][j] == 1 || dp[i-1][j] == -1) && (obs[i][j-1] == 1 || dp[i][j-1] == -1))if(obstacleGrid[i][j])  // 两个都不能达到我 或者我本身是障碍物dp[i][j] = -1dp数组初始化(初始化 第一行和第一列)dp[0][0] = 0dp[0][x] = 1 这一行第一个障碍物 后面的格子都不可达 设为-1dp[x][0] = 1 这一列第一个障碍物 下面的格子都不可达 设为-1顺序:for(i++)中for(j++)模拟一下3*30  1  11  -1 11  1  1*/int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {dp[0][0] = 0;int n = obstacleGrid.size();   // 行int m = obstacleGrid[0].size();int x = 1;for(int i = 1; i < n; i++){if(obstacleGrid[i][0] == 1)x = -1;dp[i][0] = x;}x = 1;for(int i = 1; i < m; i++){if(obstacleGrid[0][i] == 1)x = -1;dp[0][i] = x;}for(int i = 1; i < n;i++)for(int j = 1; j < m; j++){if(obstacleGrid[i-1][j] == 0 && dp[i-1][j] != -1)dp[i][j] += dp[i-1][j];if(obstacleGrid[i][j-1] == 0 && dp[i][j-1] != -1)dp[i][j] += dp[i][j-1];if((obstacleGrid[i-1][j] == 1 || dp[i-1][j] == -1) && (obstacleGrid[i][j-1] == 1 || dp[i][j-1] == -1)) // 两个都满dp[i][j] = -1;if(obstacleGrid[i][j])dp[i][j] = -1;}for(int i = 0; i < n; i++){for(int j = 0; j < m; j++)cout << dp[i][j] << " ";cout << endl;}if(m == 1 && n == 1)return obstacleGrid[0][0] ^ 1;  // 因为dp[0]设置为0  所以要特殊处理if(obstacleGrid[0][0] || obstacleGrid[n-1][m-1] || dp[n-1][m-1] == -1)return 0;  //特殊处理起点有障碍物 、终点有障碍物、 终点不可达return dp[n-1][m-1];}
};

看了题解,思路差不多,就是它遇到障碍dp[i][j]保持0,然后状态转移方程就可以写的很简单。

直接复制粘贴的代码:

class Solution {
public:int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {int m = obstacleGrid.size();int n = obstacleGrid[0].size();if (obstacleGrid[m - 1][n - 1] == 1 || obstacleGrid[0][0] == 1) //如果在起点或终点出现了障碍,直接返回0return 0;vector<vector<int>> dp(m, vector<int>(n, 0));for (int i = 0; i < m && obstacleGrid[i][0] == 0; i++) dp[i][0] = 1;for (int j = 0; j < n && obstacleGrid[0][j] == 0; j++) dp[0][j] = 1;for (int i = 1; i < m; i++) {for (int j = 1; j < n; j++) {if (obstacleGrid[i][j] == 1) continue;dp[i][j] = dp[i - 1][j] + dp[i][j - 1];}}return dp[m - 1][n - 1];}
};

2 64. 最小路径和

64. 最小路径和

和62.不同路径差不多。

AC代码:

class Solution {
public:int dp[210][210]; // (i,j)表示从起点出发到(i,j)的路径数字总和最小的数/*dp[i][j] = min(d[i-1][j]+grid[i][j] , d[i][j-1]+grid[i][j])dp[0][0] = grid[0][0]dp[0][j] += grid[0][j]dp[i][0] += grid[i][0]i++j++*/int minPathSum(vector<vector<int>>& grid) {int n = grid.size();int m = grid[0].size();dp[0][0] = grid[0][0];for(int j = 1; j < m; j++)dp[0][j] = dp[0][j-1]+grid[0][j];for(int i = 1;i < n; i++)dp[i][0] = dp[i-1][0]+grid[i][0];for(int i = 1; i < n; i++)for(int j = 1; j < m; j++ )dp[i][j] = min(dp[i-1][j]+grid[i][j] , dp[i][j-1]+grid[i][j]);return dp[n-1][m-1];}
};

3

4

5

相关文章:

HOT100打卡—day10—【DP+多维DP】—最新8.29(剩6题)

DP 1 70. 爬楼梯 70. 爬楼梯 一次做&#xff0c;AC代码&#xff1a; 疑问&#xff1a;怎么判断用搜索还是dp&#xff1f;这题&#xff0c;我没有受过dp训练所以第一反应是用dfs搜索&#xff0c;找到所有符合要求的叶子。 class Solution { public:int dp[50]; // step1&a…...

【不会用这个工具,你的Linux服务器就是个摆设!】

01 Tcpdump Tcpdump 是一个强大的网络监控工具&#xff0c;它允许用户有效地过滤网络上的数据包和流量。 这可以获得有关 TCP/IP 和网络上传输的数据包的详细信息。 当你遇到网络协议问题一筹莫展的时候&#xff0c;这时候往往可以通过tcpdump来看网络的通讯过程中发生了什么…...

09 生产者分区机制

kafka如何保证消息的有序 可以通过key-ording策略解决。kafka可以为每条消息定义消息键&#xff0c;也称为key&#xff0c;通常是带有业务属性的比如用户id之类的。有相同消息键的消息会被发到同一个分区。下面实现了key-ordering策略&#xff0c;对key的hashcode进行取模来决…...

亚马逊鲲鹏系统是怎么操作测评的

亚马逊鲲鹏系统可以注册亚马逊买家号、养号、下单留评等&#xff0c;是一款功能比较齐全的测评软件&#xff0c;具体操作如下&#xff1a; 首先我们需要先准备好买家账号&#xff0c;账号可以直接去购买已经注册好了的账号&#xff0c;也可以准备好账号所需要的一些邮箱、ip、…...

电脑上的视频如何导入苹果手机?

AirDroid支持Windows、macOS、android、iOS相互传输文件、视频、图片等。 想要从电脑传输文件到iPhone也很简单&#xff0c;在电脑和iPhone都安装AirDroid&#xff0c;连接同一网络&#xff0c;然后登录同一个帐号就可以了。可绑定的iPhone数量不限&#xff0c;只要都登录同一…...

tsmc standard cell命名规则

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 CKMUX2代表二输入clock mux&#xff0c;D2代表驱动强度X2&#xff0c;6T代表row高为6track&#xff0c;16P96C代表gate length和poly pitch&#xff0c;LVT就是low voltage thr…...

基于ssm医院在线挂号预约系统源码和论文

基于ssm医院在线挂号预约系统源码和论文072 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 课题研究的目的及意义&#xff1a; 专家号难求&#xff0c;是医院现场挂号存在的主要问题之一&#xff0c;每一名专…...

mysql binlog 浅谈

如何开启MySQL的binlog日志 在MySQL中&#xff0c;binlog指的是binary log&#xff0c;二进制日志文件。这个文件记录了MySQL所有的DML操作。通过binlog日志&#xff0c;我们可以做数据恢复&#xff0c;做主从复制等等。对于运维或架构人员来说&#xff0c;开启binlog日志功能…...

three.js(八):内置的三维几何体

三维几何体 BoxGeometry 立方体TetrahedronGeometry 四面体OctahedronGeometry 八面体DodecahedronGeometry 十二面体IcosahedronGeometry 二十面体PolyhedronGeometry 多面体SphereGeometry 球体ConeGeometry 圆锥CylinderGeometry 圆柱TorusGeometry 三维圆环TorusKnotGeomet…...

IDEA 性能优化

前言 IDEA 基于JVM&#xff0c;是内存紧张型的应用&#xff0c;即使是16GB内存也很一般。 机器配置&#xff1a; win10 proi7-4720hq 3.2G 4c8tddr3-1600IDEA 2023.2.1 本文优化在不升级硬件的前提下使用 优化 调整JVM堆内存及GC IDEA 自身的JVM运行时配置&#xff0c;启动…...

react 获取表单中输入框的值

通过使用useState钩子来创建一个状态变量&#xff0c;你可以同时获取多个Input框的值。 1获取input框的值&#xff1a; import React, { useState } from react;function MyComponent() {const [forms, setForms] useState({name: ,nation: ,});const handleInputChange (e…...

[虚幻引擎 UE5] EditableText(可编辑文本) 限制只能输入数字并且设置最小值和最大值

本蓝图函数可以格式化 EditableText 控件输入的数据&#xff0c;让其只能输入一定范围内的整数。 蓝图函数 调用方法 下载蓝图&#xff08;5.2.1版本&#xff09;https://dt.cq.cn/archives/618...

Docker技术--Docker容器管理

1.Docker容器相关的指令(单个容器操) 我们之前在Docker中部署了一个实际应用的案例wordpress,其中使用到了一些相关于容器的指令,那么下面我们一起来总结使用。 Docker指令的语法规则如下所示: Docker + 命令关键字 [+参数选项] -1类:关闭、开启、重启、开启自启 systemct…...

three.js(七):内置的二维几何体

二维几何体 PlaneGeometry 矩形平面CircleGeometry 圆形平面RingGeometry 圆环平面 PlaneGeometry 矩形平面 PlaneGeometry(width : Float, height : Float, widthSegments : Integer, heightSegments : Integer) width — 平面沿着X轴的宽度。默认值是1。height — 平面沿着Y…...

golang-bufio 缓冲读

缓冲 IO 计算机中我们常听到这样的两种程序优化方式&#xff1a; 以时间换空间以空间换时间 今天要来看的缓冲IO就是典型的以空间换时间&#xff0c;它的基本原理见上图。简单的解释就是&#xff1a;程序不再直接去读取底层的数据源&#xff0c;而是通过一个缓冲区来进行读取…...

前端 js实现 选中数据 动态 添加在表格中

如下图展示&#xff0c;表格上方有属性内容&#xff0c;下拉选中后&#xff0c;根据选中的内容&#xff0c;添加在下方的表格中。 实现方式&#xff0c;&#xff08;要和后端约定&#xff0c;因为这些动态添加的字段都是后端返回的&#xff0c;后端自己会做处理&#xff0c…...

MySQL—MySQL主从如何保证强一致性

一、前言 涉及到的东西&#xff1a;两阶段提交&#xff0c;binlog三种格式 1、两阶段提交 在持久化 redo log 和 binlog 这两份日志的时候&#xff0c;如果出现半成功的状态&#xff0c;就会造成主从环境的数据不一致性。这是因为 redo log 影响主库的数据&#xff0c;binlog…...

Lora升级!ReLoRa!最新论文 High-Rank Training Through Low-Rank Updates

目录 摘要1 引言2 相关工作3 方法4 实验5 结果6 结论7 局限性和未来工作 关注公众号TechLead&#xff0c;分享AI与云服务技术的全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验&#xff0c;同济本复旦硕&#xff0c;复旦机器人智能实验室成员&#xff0…...

gateway动态路由和普通路由+负载均衡,借助eureka

gateway 中的动态路由和普通路由是相互独立配置的注意consumer使用了openFeign远程调用的配置文件中 prefer-ip-address: false 必须为false 否则 gateway的动态路由和负载均衡无法实现 spring:cloud:gateway:enabled: truediscovery:locator:enabled: true #表示动态路由&a…...

HTTP原理与实现

一、基本概念 一、基本原理* 1、全称&#xff1a; HyperText Transfer Protocol (超文本传输协议) 2、底层实现协议&#xff1a;建立在 TCP/IP 上的无状态连接。 3、基本作用&#xff1a;用于客户端与服务器之间的通信&#xff0c;规定客户端和服务器之间的通信格式。包括请…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中&#xff0c;合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号&#xff1f; 最小权限原则&#xf…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

Docker拉取MySQL后数据库连接失败的解决方案

在使用Docker部署MySQL时&#xff0c;拉取并启动容器后&#xff0c;有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致&#xff0c;包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因&#xff0c;并提供解决方案。 一、确认MySQL容器的运行状态 …...