月度归档: 2021 年 7 月

241. 为运算表达式设计优先级(JS实现)

241. 为运算表达式设计优先级(JS实现)
1 题目
给定一个含有数字和运算符的字符串,为表达式添加括号,改变其运算优先级以求出不同的结果。你需要给出所有可能的组合的结果。有效的运算符号包含 +, – 以及 * 。
示例 1:
输入: “2-1-1”
输出: [0, 2]
解释:
((2-1)-1) = 0
(2-(1-1)) = 2
示例 2:
输入: “23-45”
输出: [-34, -14, -10, -10, 10]
解释:
(2*(3-(45))) = -34
((23)-(45)) = -14
((2(3-4))5) = -10
(2((3-4)5)) = -10
(((23)-4)*5) = 10
链接:https://leetcode-cn.com/problems/different-ways-to-add-parentheses
2 思路
这道题主要用分治的思想来做,对于一个表达式,我们可以以其中一个运算符为分界,将其划分为两个子表达式,原表达式的计算结果就是这两个子表达式计算结果再进行运算而得到的,而这子表达式又可以进一步分割为两个表达式,如此递归下去,直至表达式不可分割,也就是只剩一个数字,所有的分割方法就是*后的答案
3代码
/**
 * @param {string} input
 * @return {number[]}
 */
var diffWaysToCompute = function(input) {
if (input.length === 0) return [];
  let num = parseInt(input);
  if (num == input) return [num];    //如果是数字,则不可分割
  let result = [];
  for (let i=1; i<input.length-1; i++) {
    if (parseInt(input[i]) == input[i]) continue;
    let nums1 = diffWaysToCompute(input.slice(0,i));    //以第i个运算字符,进行分割
    let nums2 = diffWaysToCompute(input.slice(i+1));
    let res;
    for (let num1 of nums1) {       //将所有子表达式的可能结果进行运算
      for (let num2 of nums2) {
        if (input[i] === ‘+’) {
          res = num1 + num2;
        } else if (input[i] === ‘-‘) {
          res = num1 – num2;
        } else {
          res = num1 * num2;
        }
        result.push(res);
      }
    }
  }
  return result;
};

258. 各位相加(JS实现)

258. 各位相加(JS实现)
1 题目
给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。
示例:
输入: 38
输出: 2
解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2。 由于 2 是一位数,所以返回 2。
链接:https://leetcode-cn.com/problems/add-digits
2 思路
这道可以直接暴力循环,而数学上可以用自然数数根的概念进行解决
3代码
/**
 * @param {number} num
 * @return {number}
 */
var addDigits = function(num) {
return (num – 1) % 9 + 1;
};

260. 只出现一次的数字 III(JS实现)

260. 只出现一次的数字 III(JS实现)
1 题目
给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。
示例 :
输入: [1,2,1,3,2,5]
输出: [3,5]
注意:
结果输出的顺序并不重要,对于上面的例子, [5, 3] 也是正确答案。
你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?
链接:https://leetcode-cn.com/problems/single-number-iii
2 思路
这道用位运算很巧妙
计算 bitmask ^= x,则 bitmask 不会保留出现两次数字的值,因为相同数字的异或值为 0。
但是 bitmask 会保留只出现一次的两个数字(x 和 y)之间的差异,在通过 bitmask & (-bitmask) 保留 bitmask *右边的 1,这个1要么来自于x,要么来自于y,然后再通过一次遍历异或运算,得到其中一个数
3代码
/**
 * @param {number[]} nums
 * @return {number[]}
 */
var singleNumber = function(nums) {
    let bitMask = 0;
    for (let num of nums) {
        bitMask ^= num;
    }
    let diff = bitMask & (-bitMask);
    let x = 0;
    for (let num of nums) {
        if (num & diff) {   //排除y
            x ^= num;
        }
    }
    return [x, bitMask^x];
};

263. 丑数(JS实现)

263. 丑数(JS实现)
1 题目
编写一个程序,找出第 n 个丑数。
丑数就是质因数只包含 2, 3, 5 的正整数。
示例:
输入: n = 10
输出: 12
解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。
说明:
1 是丑数。
n 不超过1690。
链接:https://leetcode-cn.com/problems/ugly-number-ii
2 思路
这道题我们可以使用动态规划生成丑数,可以通过动态规划优化。
让我们从数组中只包含一个丑数数字 1 开始,使用三个指针p1, p2和 p3,标记所指向丑数要乘以的因子。算法很简单:在2*nums[p1]、3*nums[p2]、5*nums[p3]选出*小的丑数并添加到数组中。并将该丑数对应的因子指针往前走一步。重复该步骤直到计算完 1690 个丑数。
3代码
/**
 * @param {number} n
 * @return {number}
 */
var nthUglyNumber = function(n) {
    const res = [1];
    const map = {};
    let p1 = p2 = p3 = 0;
    while(res.length < n) {
        let num = Math.min(res[p1] * 2, res[p2] * 3, res[p3] * 5);
        if (!map[num]) {
            res.push(num);
            map[num] = true;
        }
        if (num === res[p1] * 2) {
            p1++;
        } else if (num === res[p2] * 3) {
            p2++;
        } else {
            p3++;
        }
    }
    return res[n-1];
};

IDEA快捷键-Mac

1、按住Command,点击相应类名/接口名:进入相关类所在文件

例如,按住Command后点击Collection,自动打开Collection.java文件

%title插图%num

2、按住Command+f,在当前文件打开字符串搜索功能

3、按住Command+O,查找类文件

4、按住Command+U,光标所在方法/变量的超类/接口文件(尝试失败,原因:?)

NYOJ 苹果

苹果

时间限制: 3000 ms  |  内存限制: 65535 KB
难度: 2
描述

ctest有n个苹果,要将它放入容量为v的背包。给出第i个苹果的大小和价钱,求出能放入背包的苹果的总价钱*大值。

 

输入

有多组测试数据,每组测试数据*行为2个正整数,分别代表苹果的个数n和背包的容量v,n、v同时为0时结束测试,此时不输出。接下来的n行,每行2个正整数,用空格隔开,分别代表苹果的大小c和价钱w。所有输入数字的范围大于等于0,小于等于1000。

输出

对每组测试数据输出一个整数,代表能放入背包的苹果的总价值。

样例输入

3 3
1 1
2 1
3 1
0 0

样例输出

2

#include <iostream>
#include <cstring>
using namespace std;

int main()
{
int w[1005],v[1005],dp[1005];
int i,j;
int n,Max;
while(cin>>n>>Max)
{
if(!n && !Max)
{
break;
}
for(i=0;i<n;i++)
{
cin>>w[i]>>v[i];
}
memset(dp,0,sizeof(dp));
for(i=0;i<n;i++)
{
for(j=Max;j>=w[i];j–)
{
if(dp[j]<dp[j-w[i]]+v[i])
{
dp[j]=dp[j-w[i]]+v[i];
}
}
}
cout<<dp[Max]<<endl;
}
return 0;
}

Idea Mac快捷键

Idea Mac快捷键
Idea中有许多快捷操作方式,本文将列出十分实用的几类操作,特别常见、不太实用或不太方便的操作可能没有写入。下面的操作方式都是在Mac OS X 10.5+的快捷键模式下使用的。

快捷键说明:
⌘:command
⇧:shift
⌥:option/alt
⌃: control/ctrl
文本编辑操作
快捷键 操作
double ⌥ 并按住不放+↑↓ 光标多行选中
⌥↑↓ 变量选择
⌘⇧⌥+鼠标左键拖拽 多行模式选中可编辑区域
⌥⇧鼠标左键拖拽 同时选中不同的多个区域
⌘⌫ 删除整行
⌥/ 根据本页内容补全词语
⌥⌘⇧↑↓ 左右移动在方法内的参数
⌥⇧⌘D 查看本地整个项目修改历史记录
⌘N 在project中创建新文件,在类中根据模板生成方法
⌥←→ 光标根据整个词汇左右移动
⌘⇧U 切换字符串大小写
⌘⇧⏎ 智能补全代码,如添加分号”;”,方法的”{}”
⇧⏎ 从当前行直接创建一个空行,并光标移到新的行
⌥⇧↑↓ 随意上下移动选择的行
⌘⇧↑↓ 在作用域内上下移动所选行
⌃I 创建父类接口应实现的方法
⌃O 创建父类可以重写的方法
⌘⇧8 切换当前文件多行模式
⌘⌥V 提取选择变量,作为局部变量
⌘⌥F 提取选择变量,作为成员变量
⌘⌥C 提取选择变量,作为静态常量
⌘⌥M 提取选择部分为方法
⌃↑↓ 光标按方法名跳转
F2 光标移动到高亮位置
⌘F 当前文件查询字符串
⌘R 当前文件替换字符串
⌘⇧F 全局查询字符串
⌘⇧R 全局替换字符串
⌘D 复制光标所在行,多选则复制所选内容
F3 mark代码
⌥F3 mark代码并标号
⇧⌘V 从粘贴板中粘贴
⌘J idea代码模板选择
代码Review操作
快捷键 操作
⌃⇧Q 查看代码上下文
F1 查看Document
⌃T 打开重构窗口
⌥⇧⌘U 打开UML图
⌘P 查看方法参数
⌘P之后,⌥↑↓ 切换重载方法
⌘⌥L 格式化代码
⌃⌥O 优化导入
⌥⏎ 智能提示
⌘B 在其他地方跳转到选择的类中,在本类中显示被调用的地方
⌃⇧P 查看表达式类型
全局操作
快捷键 操作
⇧鼠标滚轮 左右滑动
⌥F1 打开视图窗口选择
double ⌥ 打开检索(2018.3+版本整合所有类型检索)
⌃·(1左边的键) 打开idea视觉模式切换窗口
⌃⇥ 切换窗口或文件
⌘·(1左边的键) idea打开的项目间切换
⌘, 打开idea设置
⌘; 打开项目结构设置
double ⌃ 打开run anything窗口(version 2018.3+)
⌥⇧C 查看修改历史
⌘[ ] 后退或前进
⌘+数字1-9 打开各个数字对应的窗口
版本控制操作
快捷键 操作
⌘T 从版本库中拉取或更新代码
⌘K 提交代码(git中只是提交到本地,没有push)
文件跳转操作
快捷键 操作
⌘⌥←→ 跳转到前后编辑的位置
⌘⇧[ ] 按打开文件顺序切换

Linux ftp 自动上传备份文件脚本

DB 用RMAN 直接将备份文件放在盘柜上了,为了以防万一,老大让把这些备份文件在copy到一个备份服务器上。 RMAN 对目录有严格的要求,以后如果要恢复,还是还原到相同的目录。

之前我计划是将备份服务器共享之后,直接mount 到DB 服务器上,然后在cp 过去,这样是很简单的。但是搞系统的大哥建议用ftp来实现。 当时说是不会出现不能umount的情况,还有啥是安全什么得,这个新年一过也记不清了。 备份服务器上安装了Server-U 的FTP 服务,配置好之后,把备份文件传过来就可以了。

参考:

Linux 终端访问 FTP 及 上传下载 文件

http://www.cndba.cn/Dave/article/679

Linux find 命令 -exec 参数说明

http://blog.csdn.net/tianlesoftware/archive/2011/02/09/6175439.aspx

三步实现:

(1). 查找符合要求的文件,放到一个临时文件夹。

(2). 在ftp中使用mput 上传,上传完从临时文件夹中删除。

(3). 在备份服务器上做好删除策略。不然空间会撑满掉。

三点说明:

(1). 如果说只保留2天的话倒简单,在mput 之前用mdelete 把文件全部删除掉,在上传就可以了,因为我这里要保留多天的记录。 所以就只能在备份服务器上在弄个批处理的计划任务来删除了。

(2). mput 的时候有个问题,它会要求按下回车后在上传, 这对自动脚本来说是非常麻烦的。 我们需要关闭这个指令。

ftp>prompt

切换交谈式指令,使用mput/mget 时不用每个文件皆询问yes/no

ftp> help prompt

prompt force interactive prompting on multiple commands

ftp> prompt

Interactive mode off.

ftp> prompt

Interactive mode on.

ftp> prompt

Interactive mode off.

ftp>

不加任何参数就可以进行开发或关闭的设备,每执行一次,状态就会改变。

(3) find -mtime 参数说明

find /u01/backup/backupsets -mtime +1 -name “*” :+号 表示 1天前的文件

find /u01/backup/backupsets -mtime -1 -name “*” :表示1天内的文件

完整脚本:

Linux上传脚本:

[xezf@localhost scripts]$ cat uploadbackup.sh

#!/bin/sh

find /u01/backup/backupsets -mtime -1 -name “*” -exec cp -f {} /u01/backup/backuptmp /;

ftp -n 192.168.88.251 << EOF

user user password

bin

lcd /u01/backup/backuptmp

prompt

mput *

bye

EOF

cd /u01/backup/backuptmp

rm -rf /u01/backup/backuptmp/*

将uploadbackup.sh脚本添加到crontab,定时执行。 关于crontab,参考我的Blog:

Linux Crontab 定时任务 命令详解

http://blog.csdn.net/tianlesoftware/archive/2010/02/21/5315039.aspx

备份服务器删除脚本:

deletebackupfile.bat

forfiles /p E:/db_backup_history/xezf /m * /d -10 /c “cmd /c del @file”

将这个bat 文件添加到计划任务,定时执行即可。我这里保留的是10天。

在自己的本本上测试没有问题。 找个测试库跑几天看看。 没问题在搬到生产库上去。

补充一句,具体情况具体对待。

 

bat脚本上传压缩包到liunx

:: 注释
::判断 文件是否存在 存在删除
if exist “D:\java\bat\amus_product_meta_tmp.zip” (
del D:\java\bat\amus_product_meta_tmp.zip
)

::判断 文件是否存在 不存在添加

if not exist “D:\java\bat\amus_product_meta_tmp.sql” (
echo >> D:\java\bat\amus_product_meta_tmp.sql
)

c:
::mysql 安装路径
cd E:\mysql\mysql-5.5.62-winx64\bin
::mysql 中am 库中的 product_meta_tmp 备份到 product_meta_tmp.sql中

mysqldump -uroot -p123456 –default-character-set=utf8 am product_meta_tmp >D:\java\bat\product_meta_tmp.sql

::临时参数
set “Ymd=amus_product_meta_tmp”
::打印一句话
echo Winrar loading…
::WinRAR:压缩包文件
::a -r -ep1 -o+ :压缩命令

::把\product_meta_tmp.sql 压缩到 ymd.zip 中

::注意:”C:\Program Files\WinRAR\Rar.exe” 使用这个路径压缩 导致 liunx中 unzip解压失败

WinRAR a -r -ep1 -o+ “D:\java\bat\%Ymd%.zip” “D:\java\bat\product_meta_tmp.sql”

::pscp windows和liunx 互传 https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
::roy.ppk :秘钥 liunx 中有母文件 这是子文件
::121.xx.xx.45:服务器

pscp -i D:\java\bat\roy.ppk D:\java\bat\product_meta_tmp.zip root@121.xx.xx.45:/data/back

echo OK!
%title插图%num

用Windows批处理文件封装ftp文件下载

这几天,工作中需要从远端ftp服务器下载并分析大量数据文件。数据文件的分析没什么可说的,就是字串解析,要说说ftp文件下载。
要下载ftp服务器上的文件,方法有多种,如:
1. 用Socket建立链接,然后按照FTP协议,进行命令字交互,这相当于实现一个小的ftp客户端程序;
2. 用WinSDK中的WinINet, 里面提供了FtpGetFile这样的一系列方法,用于ftp客户端编程;
3. 使用类似CuteFTP这样的客户端软件;
4. 使用控制台ftp命令;

使用cuteftp等软件,需要安装软件不说,还不便于与数据处理程序协调工作,所以不行。剩下三种方法都可以,但前两种,写程序工作量比较大,那就看看*后一个方法:使用控制台ftp命令。

常用的ftp命令有open, user, get, mget, put, quit等,*重要一点,ftp命令(实际上也是一客户端程序)支持命令脚本,也就是他可以根据你设计的脚本进行链接和下载。
一个简单的脚本如下:
—————————-
open theftpserver
user admin 123456
get thefile.dat
quit
—————————-
将这样的脚本保存后(如down.ftp),用ftp命令直接调用即可:
c:/blog/csdn/guanzhongs>ftp -n < down.ftp

这样看来,使用ftp命令,结合Windows的批处理文件,完全可以把文件下载部分解决。

还有一问题:下载的文件名是不确定的,但是ftp命令中需要指定确定的文件名。解决这个问题的方法是,在批处理文件中动态生成ftp脚本文件,然后调用ftp命令执行它。

下面是一个例子,已经在WindowsXP下测试通过。这个例子可以接受服务器名,用户名,用户密码,下载文件名为参数,然后将文件下载到本地目录。同时记录简单的log信息。

—————————————————————————-
— getfiles.bat
—————————————————————————-

@echo off

rem /
rem // guanzhong 2006-1-25
rem // Blog : http://blog.csdn.net/guanzhongs
rem // batch file for download file(s) from remote server
rem // Command line :
rem // getfiles <server> <user> <password> <remotefilename>
rem /

if “%1″==”” goto Usage
if “%1″==”/?” goto Usage
if “%2″==”” goto Usage
if “%3″==”” goto Usage
if “%4″==”” goto Usage

set ftpfile=getfiles.tmp
set logfile=getfiles.log

rem // 生成ftp下载脚本

echo open %1 > “%ftpfile%”
echo user %2 %3 >> “%ftpfile%”
echo bin >> “%ftpfile%”
echo prompt >> “%ftpfile%”
echo mget %4 >> “%ftpfile%”
echo quit >> “%ftpfile%”

rem // 记录log

echo ——————————– >> “%logfile%”
date /t >> “%logfile%”
time /t >> “%logfile%”
echo ——————————– >> “%logfile%”

rem // 下载文件
ftp -n < “%ftpfile%” >> “%logfile%”

rem // 删除临时脚本
del “%ftpfile%”

echo getfiles done! >> “%logfile%”

goto End

:Usage
echo Get file(s) from the remote server, support multi get.
echo Usage:
echo getfiles [server user password remotefilename]

:End

@echo on

—————————————————————————-

上例中,批处理的第四个参数是所要下载的文件名,这个文件名与dos命令中一样,支持通配符,也就是说,这个批处理文件支持下载批量文件,如:
c:/blog/csdn/guanzhongs>getfiles 127.0.0.1 admin 123456 *.jpg
可以把远程目录下的所有jpg文件下载过来。

另外,上例中ftp脚本文件中多了两行内容:
echo bin >> “%ftpfile%”
echo prompt >> “%ftpfile%”
*行是指定用二进制方式传输,也可以用ASCII方式;
第二行是指定如果有文件覆盖时,不需要提示,这样就不会打断批处理文件的执行了。

有了这个getfiles.bat文件,在程序中下载文件,只需要ShellExecute一下就行了。

对于Linux系统,思路是类似的,而且Linux系统的Shell功能非常强大,能够实现更加完善的功能。

完成上面工作,你需要了解:
DOS/Window Console命令,及批处理脚本编写。
控制台Ftp命令的使用。

 

友情链接: SITEMAP | 旋风加速器官网 | 旋风软件中心 | textarea | 黑洞加速器 | jiaohess | 老王加速器 | 烧饼哥加速器 | 小蓝鸟 | tiktok加速器 | 旋风加速度器 | 旋风加速 | quickq加速器 | 飞驰加速器 | 飞鸟加速器 | 狗急加速器 | hammer加速器 | trafficace | 原子加速器 | 葫芦加速器 | 麦旋风 | 油管加速器 | anycastly | INS加速器 | INS加速器免费版 | 免费vqn加速外网 | 旋风加速器 | 快橙加速器 | 啊哈加速器 | 迷雾通 | 优途加速器 | 海外播 | 坚果加速器 | 海外vqn加速 | 蘑菇加速器 | 毛豆加速器 | 接码平台 | 接码S | 西柚加速器 | 快柠檬加速器 | 黑洞加速 | falemon | 快橙加速器 | anycast加速器 | ibaidu | moneytreeblog | 坚果加速器 | 派币加速器 | 飞鸟加速器 | 毛豆APP | PIKPAK | 安卓vqn免费 | 一元机场加速器 | 一元机场 | 老王加速器 | 黑洞加速器 | 白石山 | 小牛加速器 | 黑洞加速 | 迷雾通官网 | 迷雾通 | 迷雾通加速器 | 十大免费加速神器 | 猎豹加速器 | 蚂蚁加速器 | 坚果加速器 | 黑洞加速 | 银河加速器 | 猎豹加速器 | 海鸥加速器 | 芒果加速器 | 小牛加速器 | 极光加速器 | 黑洞加速 | movabletype中文网 | 猎豹加速器官网 | 烧饼哥加速器官网 | 旋风加速器度器 | 哔咔漫画 | PicACG | 雷霆加速