正负号 substr java_实战LeetCode 系列(一) (题目+解析)

2023-11-18

1 反转字符串

编写一个函数,其作用是将输入的字符串反转过来。

示例 1:

输入: "hello"

输出: "olleh"

示例 2:

输入: "A man, a plan, a canal: Panama"

输出: "amanaP :lanac a ,nalp a ,nam A"

实现

方法一:  转换为数组进行反转

思路:

先转化为数组

使用数组的反转方法进行反转

再转换为字符串返回

/**

* @param

* s [string]

* @return

* [string]

*/

var reverseString = function(s) {

let ary = s.split('');

ary.reverse();

return ary.join('');

};

方法二: 从后往前循环每个字符

思路:

创建新字符串,从后往前循环每个字符

让当前字符拼接进创建的字符串中

返回创建的字符串

var reverseString = function(s) {

let str = '',

i = s.length-1;

while (i>=0) {

str += s[i];

i--;

}

return str;

};

2 颠倒整数

描述

给定一个 32 位有符号整数,将整数中的数字进行反转。

示例 1:

输入: 123

输出: 321

示例 2:

输入: -123

输出: -321

示例 3:

输入: 120

输出: 21

注意:

假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231,  231 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。

实现

方法一:  转化为字符串,再转化为数组进行反转

思路:

转化为字符串,然后转化为数组

判断第一个是否为 负号,如果是就去掉第一个,然后进行反转

如果不是,就直接进行反转

反转后判断第一个是否为 0,如果是则去掉

然后将数组转化为字符串,如果前面第一个是负号的情况,再把符号加回去

转化为数字,判断是否超出范围,不超出就直接返回这个数字

超出就返回 0

/**

* @param

* x [number]

* @return

* [number]

*/

var reverse = function(x) {

let str = x+'',

ary = str.split(''),

num = 0;

if (ary[0] === '-') {

ary.shift();

ary.reverse();

if (ary[0] === '0') {

ary.shift();

}

num = Number('-' + ary.join(''));

return num < -(2 ** 31) ? 0 : num;

}

ary.reverse();

if (ary[0] === '0') {

ary.shift();

}

num = Number(ary.join(''));

return num > (2 ** 31-1) ? 0:num;

};

方法二 直接进行数值计算

思路:

如果是 0,直接返回 0 即可

每次循环,将 x 的最后一位通过取余的方式获得并添加在结果的最后一位上 result * 10 + x % 10。这样不管正负都是可行的

进行结果的最大最小限制,放在前面是为了优化,只要计算过程中有超过的就可以直接结束,返回 0

去掉 x 的最后一位(通过除以 10),这里需要进行判断,x 为正时就向下取整,为负时,就向上取整,直到 x 等于 0 为止,循环结束,返回结果

var reverse = function(x) {

if (x === 0) return 0;

let min = -(2 ** 31),

max = 2 ** 31-1;

let result = 0;

while (x !== 0) {

result = result * 10 + x % 10;

if (result > max || result < min) return 0;

if (x < 0) {

x = Math.ceil(x/10);

} else {

x = Math.floor(x/10);

}

}

return result;

};

3 字符串中的第一个唯一字符

描述

给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。

案例:

s = "leetcode"

返回 0.

s = "loveleetcode",

返回 2.

注意事项:您可以假定该字符串只包含小写字母。

实现

方法一 前后出现索引是否一致

思路:

从开始往后循环字符串

判断当前字符在字符串中前后出现的索引是否一致

一致则没有重复,返回当前字符索引

不一致则继续循环

如果循环结束都没有返回值,则返回 -1

/**

* @param

* s [string]

* @return

* [number] index

*/

var firstUniqChar = function(s) {

//=> 如果大小写算作重复的话

s = s.toLowerCase();

for (let i = 0; i < s.length; i++) {

let item = s[i];

if (s.indexOf(item) === s.lastIndexOf(item)) {

return i;

}

}

return -1;

};

方法二 双循环

思路:

循环字符串,让每个字符都与字符串中的其它字符进行比较

如果存在重复的,那么后面就不需要再继续比较了,直接跳出里层循环,继续下一次外层循环

外层循环中需要进行标记,记录是否存在重复,如果不存在,则直接返回这个索引,结束函数

最后所有循环都结束还没有返回,则返回 -1

var firstUniqChar = function(s) {

//=> 如果大小写算作重复的话

s = s.toLowerCase();

for (let i = 0; i < s.length; i++) {

//=> 记录是否存在重复,true 为不存在重复

let flag = false;

for (let j = 0; j < s.length; j++) {

if (j !== i && s[i] === s[j]) {

flag = true;

break;

}

}

if (!flag) {

return i;

}

}

return -1;

};

4 有效的字母异位词

描述

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词。

示例 1:

输入: s = "anagram", t = "nagaram"

输出: true

示例 2:

输入: s = "rat", t = "car"

输出: false

说明:

你可以假设字符串只包含小写字母。

进阶:

如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?

实现

方法一 利用替换删除字符

思路:

循环第一个字符串,将第二个字符串中替换当前字符为空,即,如果当前字符在第二个字符串中存在,则删除,不存在,则什么也不干

循环结束后,如果第二个字符串中还有字符,则不是异位词,返回 false

否则返回 true

/**

* @param

* s [string] first word

* t [string] second word

* @return

* [boolean]

*/

var isAnagram = function(s, t) {

//=> 如果长度不一样,直接返回 false

if (s.length !== t.length) return false;

for (let i = 0; i < s.length; i++) {

t = t.replace(s[i], '');

}

if (t.length !== 0) {

return false;

}

return true;

};

如果存在 Unicode 字符,利用正则,将其替换正常的字符(使用String.fromCodePoint())

5 验证回文字符串

描述

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。

说明:本题中,我们将空字符串定义为有效的回文串。

示例 1:

输入: "A man, a plan, a canal: Panama"

输出: true

示例 2:

输入: "race a car"

输出: false

实现

方案一 利用正则替换和反转字符串

思路:

利用正则替换掉不是数字和字母的字符

由于忽略大小写,将其变为小写

反转字符串

将反转字符串和原字符串比较,相等则是回文,返回 true

否则返回 false

/**

* @param {string} s

* @return {boolean}

*/

var isPalindrome = function(s) {

s = s.replace(/[^a-zA-Z0-9]/g, '').toLowerCase();

let str = s.split('').reverse().join('');

if (str === s) return true;

return false;

};

方案二 利用正则替换和折半比较

思路:

利用正则替换掉不是数字和字母的字符

由于忽略大小写,将其变为小写

算出需要的中间值(从左开始)

分别从左开始和从右开始循环比较,直到左边到达中间值为止

如果存在不相等的,则返回 false

循环结束都没有返回,则返回 true

var isPalindrome = function(s) {

s = s.replace(/[^0-9a-zA-Z]/g, '').toLowerCase();

let mid = Math.floor(s.length/2)-1,

i = 0,

j = s.length - 1;

while (i <= mid) {

if (s[i] !== s[j]) {

return false;

}

i++;

j--;

}

return true;

};

6 字符串转整数(atoi)

描述

实现 atoi,将字符串转为整数。

在找到第一个非空字符之前,需要移除掉字符串中的空格字符。如果第一个非空字符是正号或负号,选取该符号,并将其与后面尽可能多的连续的数字组合起来,这部分字符即为整数的值。如果第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。

字符串可以在形成整数的字符后面包括多余的字符,这些字符可以被忽略,它们对于函数没有影响。

当字符串中的第一

个非空字符序列不是个有效的整数;或字符串为空;或字符串仅包含空白字符时,则不进行转换。

若函数不能执行有效的转换,返回 0。

说明:

假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。如果数值超过

可表示的范围,则返回 INT_MAX (231 − 1) 或 INT_MIN (−231) 。

示例 1:

输入: "42"

输出: 42

示例 2:

输入: "-42"

输出: -42

解释: 第一个非空白字符为 '-', 它是一个负号。

我们尽可能将负号与后面所有连续出现的数字组合起来,最后得到 -42 。

示例 3:

输入: "4193 with words"

输出: 4193

解释: 转换截止于数字 '3' ,因为它的下一个字符不为数字。

示例 4:

输入: "words and 987"

输出: 0

解释: 第一个非空字符是 'w', 但它不是数字或正、负号。因此无法执行有效的转换。

示例 5:

输入: "-91283472332"

输出: -2147483648

解释: 数字 "-91283472332" 超过 32 位有符号整数范围。因此返回 INT_MIN (−231) 。

实现

方法一 利用 parseInt 以及 isNaN

思路:

使用 parseInt 转换字符串

如果是 NaN,则将结果变为 0

进行结果的最大最小值限制

/**

* @param

* str [string]

* @return

* [number] int

*/

var myAtoi = function(str) {

let num = parseInt(str);

if(isNaN(num)) {

num = 0;

}

let max = (2**31)-1,

min = -(2**31);

num = num > max ? max : num;

num = num < min ? min : num;

return num;

};

方法二 利用正则循环判断

思路:

先去空格

判断第一个字符是否是数字或者正负号,不是则返回 0

保存第一个字符串

循环字符串(从索引 1 开始),添加入结果字符中,遇到不是数字的跳出循环

如果第一个字符为正负号,且结果字符串为空,那么返回 0

否则,将正负号添加会结果字符串前面,并将结果字符串转化为数字

进行结果最大最小限制

返回结果数字

var myAtoi = function(str) {

str = str.trim();

let reg = /^[0-9-+]/,

max = (2**31)-1,

min = -(2**31)

if (!reg.test(str)) {

return 0;

}

let num = '',

c = str[0];

for (let i = 1; i < str.length;i++) {

if (!/[0-9]/.test(str[i])) {

break;

}

num += str[i];

}

if ((c === '-' ||c === '+') && num.length === 0) return 0;

num = (c + num)*1;

num = num < min ? min : num;

num = num > max ? max : num;

return num;

};

7 实现 strStr() 函数

描述

给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出

needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回  -1。

示例 1:

输入: haystack = "hello", needle = "ll"

输出: 2

示例 2:

输入: haystack = "aaaaa", needle = "bba"

输出: -1

说明:

当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。

对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与C语言的 strstr() 以及 Java的 indexOf() 定义相符。

实现

方法一 JavaScript 字符串原生方法 indexOf

var strStr = function(haystack, needle) {

return haystack.indexOf(needle);

};

方法二 循环加 substr 抽取比较

思路:

如果 needle 为空字符串,则返回 0

循环 haystack 字符串,如果当前项与 needle 的第一项相等

从当前项开始,抽取 haystack 字符串中,needle 长度的字符串

让这个抽取的字符串与 needle 比较,相等则符合,返回当前索引

不符合则继续循环,循环结束,没有返回则返回 -1

var strStr = function(haystack, needle) {

if (needle === '') return 0;

for (let i = 0; i < haystack.length; i++) {

let item = haystack[i];

if (item === needle[0]) {

let str = haystack.substr(i, needle.length);

if (str === needle) return i;

}

}

return -1;

};

优化:由于符合的子串应当长度相等,所以,最初的循环只需要到 haystack 长度 - needle 长度 + 1 即可,后面的子串长度肯定小于 needle,不需要考虑了

var strStr = function(haystack, needle) {

if (needle === '') return 0;

for (let i = 0; i < haystack.length - needle.length + 1; i++) {

let item = haystack[i];

if (item === needle[0]) {

let str = haystack.substr(i, needle.length);

if (str === needle) return i;

}

}

return -1;

};

方法三 双循环

思路:

needle 为空字符串,返回 0

最笨的循环方式,循环 haystack,如果当前项与 needle 的第一项相等,则开始第二个循环

将 haystack 当前索引后面的字符与 needle 中的字符每个都进行比较,只要有一个不符合则退出循环

如果都符合,则返回当前索引

外层循环结束还是没有找到,则返回 -1

注意:这里提交,会显示时间超时,也就是两个字符串长度都很大的时候,两层循环,运行时间指数增长。

所以,为了减少循环次数,想到了上面方法中提到的优化,上面的方法也可以使用。优化后,代码运行时间就相当的可观了

var strStr = function(haystack, needle){

if (needle === '') return 0;

for (let i = 0; i < haystack.length-needle.length+1; i++) {

let item = haystack[i];

if (item === needle[0]) {

let j = i+1,

k = 1,

flag = true;

while (k < needle.length) {

if (haystack[j] !== needle[k]) {

flag = false;

break;

}

j++;

k++;

}

if (!flag) continue;

return i;

}

}

return -1;

};

8 报数

描述

报数序列是指一个按照其中的整数的顺序进数序列,按行报数,得到下一个数。其前五项如下:

1. 1

2. 11

3. 21

4. 1211

5. 111221

1 被读作  "one 1"  ("一个一") , 即 11。

11 被读作 "two 1" ("两个一"), 即 21。

21 被读作 "one 2",  "one 1" ("一个二" ,  "一个一") , 即 1211。

给定一个正整数 n(1 ≤ n ≤ 30),输出报数序列的第 n 项。

注意:整数顺序将表示为一个字符串。

示例 1:

输入: 1

输出: "1"

示例 2:

输入: 4

输出: "1211"

实现

方法一 利用正则以及替换

思路:

初始字符串为 '1',那么后面循环次数应当是 n - 1

正则匹配所有连续的数字:/1+|2+|3+|4+|5+|6+|7+|8+|9+/g

把匹配的字符替换为长度加这个数字

循环完成后返回最后的字符串

/**

* @param

* n [number] number of times

* @return

* [string] item n string

*/

var countAndSay = function(n){

let str = '1';

let i = 1;

let reg = /1+|2+|3+|4+|5+|6+|7+|8+|9+/g;

while (i < n) {

str = str.replace(reg, function(str){

let s = str.length + str[0];

return s;

})

i++;

}

return str;

};

9 最长公共前缀

描述

编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀,返回空字符串 ""。

示例 1:

输入: ["flower","flow","flight"]

输出: "fl"

示例 2:

输入: ["dog","racecar","car"]

输出: ""

解释: 输入不存在公共前缀。

说明:

所有输入只包含小写字母 a-z 。

实现

方法一 双循环

思路:

测试实例中存在空数组,所以需要增加判断,如果为空则返回空字符串

如果数组中只有一个字符串,则返回这个字符串,这一步可以提高性能

计算出字符串中最短的字符串的长度

从 0 开始循环最小长度,外层循环记录一个标记,方便退出外层循环,初始为 true

循环数组中的每一项(除了最后一项),将当前项与下一项的 外层循环的索引字符 做比较

如果相等,则继续循环,如果不相等,则将标记置为 false,退出里层循环

外层循环中,如果标记为 false,则退出外层循环,否则,这个字符为公共字符,添加入结果字符串中

最后返回结果字符串

/**

* @param

* strs [object] string array

* @return

* [string] common prefix

*/

var longestCommonPrefix = function(strs) {

if (strs.length === 0) return '';

if (strs.length === 1) return strs[0];

let result = '',

lengthAry = strs.map(item=>{

return item.length;

}),

n = Math.min.apply(Math, lengthAry);

for (let i = 0; i < n; i++) {

let flag = true;

for (let j = 0; j < strs.length-1; j++) {

let item = strs[j],

next = strs[j+1];

if (item[i] !== next[i]) {

flag = false;

break;

}

}

if (!flag) break;

result += strs[0][i];

}

return result;

};

10 旋转矩阵

描述

给定一个 n × n 的二维矩阵表示一个图像。

将图像顺时针旋转 90 度。

说明:

你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。

示例 1:

给定 matrix =

[

[1,2,3],

[4,5,6],

[7,8,9]

],

原地旋转输入矩阵,使其变为:

[

[7,4,1],

[8,5,2],

[9,6,3]

]

示例 2:

给定 matrix =

[

[ 5, 1, 9,11],

[ 2, 4, 8,10],

[13, 3, 6, 7],

[15,14,12,16]

],

原地旋转输入矩阵,使其变为:

[

[15,13, 2, 5],

[14, 3, 4, 1],

[12, 6, 8, 9],

[16, 7,10,11]

]

实现

方法一 分层交换

思路:

矩阵是一层一层往里的,比如 3*3 只有两层,里面一层是 1*1 的矩阵,4*4 有两层,里面一层是 2*2 的矩阵

每一层的交换都是 n-1 个数旋转交换位置

开始时,记录交换的开始和结束索引,每次循环开始索引加一,结束索引减一,直到两者相等或开始大于结束时退出循环,这样就是循环每一层,两者相等时是因为只有一个数,不用交换

每一层中,利用一个中间数组、三个变动的索引和两个不变(开始与结束)的索引,进行旋转交换

/**

* @param

* matrix [object] matrix array

* @return

* [void]

*/

var rotate = function(matrix) {

//=> 记录开始和结束索引

let start = 0,

end = matrix.length-1;

//=> 遍历每一层

while (start < end) {

// 中间数组

let ary = [];

// 三个变化的索引

let i = start,

j = end,

k = 0; // 这是中间数组需要的索引,可以不用

//=> 判断条件其实只需要其中一个达到条件即可,因为循环次数都是一样的

while (i < end && j > start) {

ary[k] = matrix[start][i];

matrix[start][i] = matrix[j][start];

matrix[j][start] = matrix[end][j];

matrix[end][j] = matrix[i][end];

matrix[i][end] = ary[k];

i++;

j--;

k++;

}

start++;

end--;

}

};

11 两数之和

描述

给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。

你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9

所以返回 [0, 1]

实现

方法一 双循环

思路:

循环数组,将每一项(除最后一项外)都与其后面的所有项比较

如果两项相加等于目标值,则将两项的索引添加进结果数组中,然后退出循环

最后返回结果数组,不存在则返回空数组

/**

* @param

* nums [object] nums Array

* target [number] target number

* @return {number[]}

*/

var twoSum = function(nums, target) {

let ary = [];

for (let i = 0; i < nums.length - 1; i++) {

for (let j = i + 1; j < nums.length; j++) {

if (nums[i] + nums[j] === target) {

ary.push(i);

ary.push(j);

break;

}

}

}

return ary;

};

如果需要返回所有相加等于目标值的索引组合,那么就把索引组合成一个数组再添加进结果数组中,并且不退出循环。但是这样的话就会对元素重复利用。

12 移动零

描述

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

示例:

输入: [0,1,0,3,12]

输出: [1,3,12,0,0]

说明:

必须在原数组上操作,不能拷贝额外的数组。

尽量减少操作次数。

实现

方法一 删除后再添加

思路:

循环数组,为了尽量减少数组塌陷带来的消耗,使用从后往前遍历

如果当前项为 0,则删除当前项,并记录删除的 0 的个数

循环结束后,删除了多少个 0,则在数组后面添加多少个 0

/**

* @param

* nums [object] nums Array

* @return

* [void]

*/

var moveZeroes = function(nums) {

let flag = 0;

for (let i = nums.length - 1; i >= 0; i--) {

let item = nums[i];

if (item === 0) {

nums.splice(i, 1); //=> 从后往前遍历,数组塌陷不会带来问题

flag++;

}

}

for (let i = 0; i < flag; i++) {

nums.push(0);

}

};

方法二 优化删除后再添加

思路:

这里由于是从后往前遍历,可以循环结束后添加,也可以每次删除后添加

每次删除后添加,这样就可以减少后面的循环消耗,也不需要记录了

var moveZeroes = function(nums) {

for (let i = nums.length - 1; i >= 0; i--) {

let item = nums[i];

if (item === 0) {

nums.splice(i, 1); //=> 从后往前遍历,数组塌陷不会带来问题

nums.push(0);

}

}

};

方法三 循环交换位置

思路:

循环数组,从后往前遍历

当前项为 0,则让其与后面所有的不为 0 的数都交换位置

这里判断与不为 0 的数交换,也是为了减少操作,从后往前遍历才能实现

var moveZeroes = function(nums) {

for (let i = nums.length - 1; i >= 0; i--) {

let item = nums[i];

if (item === 0) {

for (let j = i; j < nums.length-1; j++) {

let temp = null;

if (nums[j+1] === 0) {

break;

} else {

temp = nums[j+1];

nums[j+1] = nums[j];

nums[j] = temp;

}

}

}

}

};

13 两个数组的交集 II

描述

给定两个数组,编写一个函数来计算它们的交集。

示例 1:

输入: nums1 = [1,2,2,1], nums2 = [2,2]

输出: [2,2]

示例 2:

输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]

输出: [4,9]

说明:

输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。

我们可以不考虑输出结果的顺序。

进阶:

如果给定的数组已经排好序呢?你将如何优化你的算法?

如果 nums1 的大小比 nums2 小很多,哪种方法更优?

如果 nums2 的元素存储在磁盘上,磁盘内存是有限的,并且你不能一次加载所有的元素到内存中,你该怎么办?

实现

方法一 循环测试是否存在,存在则删除

思路:

先克隆一份需要操作的 nums2 数组

循环 nums1 数组

如果当前项在克隆的数组中已经存在,那么把当前项加入结果数组中,删除克隆数组中查找到的值(防止重复查找)

/**

* @param

* nums1 [object] nums1 Array

* nums2 [object] nums2 Array

* @return

* [Array]

*/

var intersect = function(nums1, nums2){

let ary = [...nums2],

result = [];

nums1.forEach(item=>{

let index = ary.indexOf(item);

if (index !== -1) {

ary.splice(index,1);

result.push(item);

}

})

return result;

};

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

正负号 substr java_实战LeetCode 系列(一) (题目+解析) 的相关文章

  • Linux 重启后ext文件系统Inode 625047 has illegal blocks异常

    情况描述 系统重启后 发现报错 dev VolGroup00 LogVol00 contains a file system with errors check forced inode 625047 has illegal block s
  • 2021-03-31

    智能风控中的全场景化的模型组合包括哪些内容 近期某些网贷的广告 频上热搜 近有某东 远有某60 相信在大家的WX朋友圈更有大量 精彩 广告诱惑各位提前消费 于目前的政策而言 当下网贷行业的监管已达到最顶峰 网贷再也回不到巅峰时刻 但与此同时
  • 传统的项目经理可以担当Scrum Master吗

    原文链接作者 Amir Nasiri 一个习惯了传统项目管理方法的项目经理 可以在敏捷组织里担当ScrumMaster吗 这是一个很有意思的问题 也是所有项目经理在有朝一日面对敏捷方法 比如Scrum 的时候需要思考的问题 敏捷在落地实施时
  • QGis 二次开发教程(目录)

    目录 QGis 二次开发搭建 windows QGis QgsVectorLayer 图层加载 shp file矢量图层 QGis QgsVectorLayer 图层数据解析 获取经纬度集合和其他字段标量 QGis QgsVectorLay
  • Keras+CNN模型识别手写数字(mnist)详细分析

    CNN模型 CNN卷积神经网络 包含卷积层 卷积运算提取输入的不同特征 更多层的网络能从低级特征中迭代提取等复杂的特征 线性整流层 RELU 池化层 卷积后会得到维度很大的特征 将特征切成几个区域 取最大值或平均值 得到新的较小维度特征 全
  • tcp和udp,通信协议

    1 什么是tcp和udp 常用的网络通讯 浏览网页 软件聊天等等 都是基于tcp和udp传输的 2 tcp和udp的区别是什么 1 最大的区别是一个基于连接 一个基于非连接 举例说明 如果把人与人之间的通信比喻为进程之间的通信 写信和电话
  • 通俗易懂讲解区块链

    文章目录 一 区块链是什么 区块链的几个核心特点 1 去中心化 2 非常安全 3 不可篡改性 4 开放性 5 无第三方 6 匿名性 二 区块链与比特币的关系 三 通俗易懂解释区块链 1 民生领域 2 经济产业领域 3 政务领域 4 数字身份
  • B站马士兵python入门基础版详细笔记(6)

    前言 这篇文章是B站学习python入门基础班的视频的第五 六章内容 主要讲述的是列表 主要包括列表的创建 以及他的元素的增 删 查 改操作命令 一 列表的初始化 为什么要使用列表 列表就好比C语言中的数组 它可以在这个数组里面保存各种类型
  • 达梦数据库创建数据库实例、规划表空间

    1 创建数据库实例 1 1图形方式创建 到数据库安装目录 dm7 的 tool目录下 打开达梦数据库配置助手 dmdba localhost tool dbca sh 打开达梦数据库配置助手 选择创建数据库实例 点击 开始 如下图 创建数据
  • unity shader入门(一) 基本结构和变量声明

    文章目录 前言 Unity中shader相关的结构 什么是openGL和DirectX unity shader的分类 编写一个unity shader shader的基本结构 shader的property类型 在subshader中再次
  • Matlab 高斯信道下QPSK通带通信系统的简单仿真

    1 原理 2 仿真 3 总结反思 4 参考资料 1 原理 QPSK的具体内容请参考百度 QPSK的调制jie框图大致如下 QPSK信号可以采用正交调制的方式产生 如第一张图片的左半部分 I路信号与cos 信号相乘 Q 路信号与sin信号相乘
  • 【知识分享】机器学习的基本流程

    个人理解的机器学习简单流程如下 0 收集数据 1 对数据集进行预处理 2 划分数据集 训练集 测试集 验证集 3 训练 4 验证模型 对每个步骤详细解释 0 收集数据 可以使用之前学过使用爬虫对特定网页内容爬取 或在数据网页等信息网站上直接
  • [error] MFC错误不能将参数1从"const char [3]"转换为"const wchar_t *"

    在做项目中经常遇到很多错误 这里我仅仅把自己遇到的一些错误和解决方法写出 供自己和大家查看 代码如下 CRect rect GetClientRect rect CString str str Format ld rect bottom M
  • OpenCV Error: Assertion failed (type == B.type() && (type == CV_32FC1

    最近切换到64位系统上 运行以前的程序真是各种bug不停啊 主要还是系统位数导致的 先看下面这个错误 OpenCV Error Assertion failed type B type type CV 32FC1 type CV 64FC1
  • 解决ChatGML启动报错:RuntimeError: expected scalar type Half but found Float

    1 编辑web demo2 py文件 2 在原始命令加上 half 原始命令 model AutoModel from pretrained app model chatglm2 6b trust remote code True half
  • 如何优雅地实现 Excel 文件导出功能?(阿里出品的 EasyExcel,安利一波)

    EasyExcel 前言 导出是后台管理系统的常用功能 当数据量特别大的时候会内存溢出和卡顿页面 曾经自己封装过一个导出 POI百万级大数据量EXCEL导出 采用了分批查询数据来避免内存溢出和使用SXSSFWorkbook方式缓存数据到文件
  • 区块链技术详解

    区块链概述 区块链定义 区块链 是一个共享的 不可篡改的账本 旨在促进业务网络中的交易记录和资产跟踪流程 资产 可以是有形的 如房屋 汽车 现金 土地 也可以是无形的 如知识产权 专利 版权 品牌 几乎任何有价值的东西都可以在区块链网络上跟
  • 关于ROM,RAM,FLASH的个人理解

    RAM和ROM是指的存储介质 不是存储器 在硬件构造上不同 所以性质不同 但都是半导体存储介质 RAM是随机存取存储器 随机是什么意思呢 意思是 给定一个地址 可以立即访问到数据 访问时间和位置无关 RAM特点是掉电会丢失数据 但是RAM的
  • docker -toolbox host is not running 最简单解决方案

    很多小伙伴下载toolbox后 用gitbash运行docker machine start 可能会出现 docker host is not running的错误信息 其实我觉得就是无法启用虚拟机服务 打开虚拟机可以看到其实创建的虚拟机是

随机推荐

  • 小米手机安装linux视频教程,屏幕失灵的小米5手机安装linuxdeploy centos7记录

    几年前使用的小米5手机不知道什么时候屏幕失灵了 触摸任何地方都没有反应 幸好下面三个实体按键还是好的 就拿来安装一下linux系统 我到华强北去问了一下 修好屏幕至少需要100多块 这个手机卖旧手机也就是100块 懒得换屏幕盖板了 刚好前段
  • java sqlexception_java.sql.SQLException

    java sql SQLException ResultSet is closed是什么错误 java sql SQLException ResultSetisclosed是什么错误 java sql SQLException Result
  • 项目开发中开发文档出现的问题及其对策

    在常规项目开发管理中 很多项目专家都提出要用各种各样规范的文档对开发工作进行管理 但是在日常工作中 由于这些文档的编写的管理工作都是相当繁重的 以致让一线员工不能主动积极使用 更新这些文档 长期下来 这些管理型的 设计型的文档所发挥的作用就
  • Qt中SQLite3的增、删、改、查操作

    QT sqlite3 先说一下QT自带数据库sqlite3和另外用sqlite3插件的区别 他们的功能是一样的 但是代码就不一样了 QT对数据库具有完善的支持 不需要加任何其他插件就可以直接使用 但是如果你要是加了sqlite3插件 调用数
  • 解决: Message: invalid selector: Compound class names not permitted报错的问题

    对于出现消息 无效的选择器 不允许使用复合类名的问题 该页面解析 原始代码 self driver find element by class name s btn btn ok click 问题 代码出现如下清空 Traceback mo
  • Java Swing基础(层次结构,组件,布局管理)

    Swing基础层次结构 图形环境和图形对象 坐标 GUI组件的左上角坐标默认为 0 0 从左上角到右下角 水平坐标x和垂直坐标y增加 坐标的单位是像素 Graphics对象 专门管理图形环境 Graphics类是一个抽象类 抽象类Graph
  • 前端调试知识, 各种调试姿势

    在日常开发过程中 如果我们的程序出问题了 要找出是哪里导致的问题的时候 往往会遇到一个变量在10多20多个地方被改变了 然后找不到时哪一次的改变导致的异常 笨的方法也有 就是每一个有可能改到的地方都加上一个console log 通过log
  • 揭示网络通信的秘密:协议与套接字编程之旅

    文章目录 探索网络编程的魔法世界 网络编程 网络编程的基本概念 网络通信协议 套接字编程 网络编程的实际应用 总结 个人主页 程序员 小侯 CSDN新晋作者 欢迎 点赞 评论 收藏 收录专栏 Java知识介绍 文章内容 网络编程 适用于 J
  • STM32的CAN标识符过滤器超简单理解

    1 STM32中CAN1与CAN2的过滤器组 103系列14个过滤器组 104 107系列28个过滤器组 CAN FilterInitStructure CAN FilterNumber 0 0 13 2 每组过滤器组有两种工作模式 标识符
  • VC++ FTP文件下传(断点续传)

    include
  • Android OpenCV环境搭建与Demo展示

    title Android OpenCV环境搭建与Demo展示 tags Opencv date 2020 2 02 00 53 00 最终效果 视频展示 https www bilibili com video av86393649 An
  • (一)树莓派Pico用micropython实现LED闪烁

    方法一 这段代码使用MicroPython来控制Pico开发板上的板载led 引脚为25 GPIO 25 来控制LED的闪烁 如果需要控制外接led模块 请确保将LED正确连接到Pico开发板的引脚 并根据需要进行相应的调整 首先 通过 i
  • Docker : docker: Error response from daemon: user specified IP address is supported on user defined

    1 美图 2 背景 想运行docker容器的时候 指定ip 但是发现出问题 base lcc lcc docker run d name es2 ip 172 16 12 12 p 9200 9200
  • 如何将你的iOS应用成功上架App Store(图文详解)

    上架基本需求资料 1 苹果开发者账号 如还没账号先申请 苹果开发者账号申请教程 2 开发好的APP 通过本篇教程 可以学习到ios证书申请和打包ipa上传到appstoreconnect apple com进行TestFlight测试然后提
  • “北漂”小夫妻新婚后的理财计划

    北漂 小夫妻新婚后的理财计划 提要 经过多年的努力打拼 1976 年出生的姜帆终于在京城站稳脚跟 做上了一家大公司的业务主管 今年 十一 国庆节还 和谈了多年马拉松恋爱的女友举行了婚礼 面对婚后新形势下几个令他烦恼的家庭理财目标 他该如何应
  • VNC VIEWER 连接闪退不断重新连接的解决办法

    1 vnc viewer官网下载standalone 2 vnc链接 3 连接后不断闪退 又不断重连 根本无法进行任何操作或操作困难 解决办法 1 2 点击properties 3 点击options general 调低画质
  • C语言好题解析(一)

    目录 选择题1 选择题2 选择题3 选择题4 编程题一 选择题1 执行下面程序 正确的输出是 int x 5 y 7 void swap int z z x x y y z int main int x 3 y 8 swap printf
  • 在Linux上面进行远程git的数据拉取与上传

    1 安装git sudo apt get update sudo apt get install git 2 查看本地git信息 git version 3 在当前路径下创建一个本地git仓库 sudo git init 4 上传当前的文件
  • TIM输出比较

    以下内容均来自 bilibili江协科技 OC输出比较 输出比较可以通过CNT与CCR寄存器值的关系 来对输出电平进行置1 置0或翻转的操作 用于输出一定频率和占空比的PWM波形 每个高级定时器和通用定时器都拥有4个输出比较通道 高级定时器
  • 正负号 substr java_实战LeetCode 系列(一) (题目+解析)

    1 反转字符串 编写一个函数 其作用是将输入的字符串反转过来 示例 1 输入 hello 输出 olleh 示例 2 输入 A man a plan a canal Panama 输出 amanaP lanac a nalp a nam A