target

【Leetcode 每日一题】面试题57 - II. 和为s的连续正数序列

允我心安 提交于 2020-03-07 02:48:02
题目 描述 输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。 序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。 示例 1: 输入:target = 9 输出:[[2,3,4],[4,5]] 示例 2: 输入:target = 15 输出:[[1,2,3,4,5],[4,5,6],[7,8]] 限制: 1 <= target <= 10^5 思路 根据观察,若至少两个连续的整数加和得到Target,那么需要依次遍历的最大值不会超过Target的一半(包括奇数)。所以从1到Target/2开始,对每个i进行i,i+1,i+2...的累加,当总和不再小于Target时,判断。若结果相等,则将这组数字输出到result中;否则i++。 解答 class Solution { public: vector<vector<int>> findContinuousSequence(int target) { vector<vector<int>> result(0); for(int i=1;i<=target/2;i++) { int j=i; int sum=i; while(sum<target) { j++; sum+=j; } if(sum == target) { vector<int> temp; for(int k=i

Makefile使用总结

99封情书 提交于 2020-03-06 22:44:12
1. Makefile 简介 Makefile 是和 make 命令一起配合使用的. 很多大型项目的编译都是通过 Makefile 来组织的, 如果没有 Makefile, 那很多项目中各种库和代码之间的依赖关系不知会多复杂. Makefile的组织流程的能力如此之强, 不仅可以用来编译项目, 还可以用来组织我们平时的一些日常操作. 这个需要大家发挥自己的想象力. 本篇博客是基于 {精华} 跟我一起写 Makefile 而整理的, 有些删减, 追加了一些示例. 非常感谢 gunguymadman_cu 提供如此详尽的Makefile介绍, 这正是我一直寻找的Makefile中文文档. 1.1 Makefile 主要的 5个部分 (显示规则, 隐晦规则, 变量定义, 文件指示, 注释) Makefile基本格式如下: target ... : prerequisites ... command ... ... 其中, target - 目标文件, 可以是 Object File, 也可以是可执行文件 prerequisites - 生成 target 所需要的文件或者目标 command - make需要执行的命令 (任意的shell命令), Makefile中的命令必须以 [tab] 开头 显示规则 :: 说明如何生成一个或多个目标文件(包括 生成的文件, 文件的依赖文件,

一个比较通用的Makefile

微笑、不失礼 提交于 2020-03-06 22:36:18
一个比较通用的Makefile TARGET = xxx SRCDIRS = . SRCEXTS := .c .cpp SRC = $(foreach d,$(SRCDIRS),$(wildcard $(addprefix $(d)/*,$(SRCEXTS)))) OBJ = $(foreach x,$(SRCEXTS), $(patsubst %$(x),%.o,$(filter %$(x),$(SRC)))) CFLAGS += -Wall -g \ -I../libjson/include/ \ -I../mylib \ CPPFLAGS += $(CFLAGS) CXXFLAGS += $(CFLAGS) LDLIBS += -lm \ ../libjson/lib/$(CROSS)/libjson.a \ ../netzip_build/lib/libz.a $(TARGET): $(OBJ) $(CXX) -o $(TARGET) $(OBJ) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $(LDLIBS) %.o: %.c $(CC) -c $(CPPFLAGS) $(CFLAGS) $< -o $@ %.o: %.cpp $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $< -o $@ %.d: %.c @set -e;

LeetCode 16. 最接近的三数之和

◇◆丶佛笑我妖孽 提交于 2020-03-06 22:09:17
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。 例如,给定数组 nums = [-1,2,1,-4], 和 target = 1. 与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2). class Solution { public: int threeSumClosest(vector<int>& nums, int target) { int i, j; int current_sum; int closet_sum = nums[0] + nums[1] + nums[2]; sort(nums.begin(), nums.end()); for (int k = 0; k < nums.size() - 2; ++k) { i = k + 1; j = nums.size() - 1; while (i < j) { current_sum = nums[k] + nums[i] + nums[j]; if (abs(target - closet_sum) > abs(target - current_sum)) closet_sum = current_sum; if (target < current

3月打卡活动第6天 面试题第57题:和为s的连续正数序列(简单)

十年热恋 提交于 2020-03-06 19:37:24
3月打卡活动第6天 面试题第57题:和为s的连续正数序列(简单) 题目:输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。 解题思路:双指针方法,和大于t,左指针就向右移,小于t,右指针向右移。 class Solution { public int [ ] [ ] findContinuousSequence ( int target ) { List < int [ ] > ansList = new ArrayList < > ( ) ; int start = 1 ; int end = 0 ; int sum = 0 ; while ( end <= ( target + 1 ) / 2 ) { if ( sum < target ) { end ++ ; sum += end ; } else if ( sum > target ) { sum -= start ; start ++ ; } else if ( sum == target ) { int j = 0 ; int [ ] ans = new int [ end - start + 1 ] ; for ( int i = start ; i <= end ; i ++ ) { ans [ j ++ ]

剪绳子

情到浓时终转凉″ 提交于 2020-03-06 18:53:30
剪绳子 题目描述 给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],…,k[m]。请问k[0]xk[1]x…xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。 思路: 这题有两种解题思路,一种动态规划另一种是贪心。 动态规划: 因为试求绳子分解后的最大乘积,是求最优解,这符合动态规划的第一个特点。该问题的最优解依赖于小问题的最优解,符合动态规划的第二个特点。往下分解的时候有很多重复的小问题,这是动态规划的第三个特点。该题都符合,所以可以使用动态规划。 一开始先将一些特殊情况输出来,因为题目是至少要剪一到,所以长度小于2的时候返回0,没得剪。长度为2的时候返回1,长度为3的时候返回。这就是特殊值。以为4的分解有两种情况。虽然可以看出最优解,但我没有吧他归为特殊情况。建一个最优解数组,从开始往下算,算到绳子长度为n时就可以停止了。注意一点的是在剪的时候,最长剪到一半就可以了,如果超过一半,其实会和前面的重复。 贪心: 这题的贪心策略是尽量剪绳子的长度为三,剩下4的时候剪为两段2; 当你n>=5时,2*(n-2)>n并且3*(n-3)>n,当绳子长度大于5的时候就尽量剪长度为3和2的绳子, 并且3*(n-3)>2*(n-2),所以尽量剪3

LeetCode | 面试题 57 - Ⅱ. 和为s的连续正数序列【Python】

浪尽此生 提交于 2020-03-06 17:34:34
LeetCode 面试题 57 - Ⅱ. 和为s的连续正数序列【Easy】【Python】【滑窗】【数学】 问题 力扣 输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。 序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。 示例 1: 输入:target = 9 输出:[[2,3,4],[4,5]] 示例 2: 输入:target = 15 输出:[[1,2,3,4,5],[4,5,6],[7,8]] 限制: 1 <= target <= 10^5 思路 解法一 滑动窗口 i 指针表示窗口左边界,j 指针表示窗口右边界。 当 sum < target 时,j 指针右移。 当 sum > target 时,i 指针右移。 当 sum = target 时,窗口内的数组加入 res,i 指针右移。 注意窗口的 range 是左闭右开 [ )。 时间复杂度: O(n) Python3代码 class Solution : def findContinuousSequence ( self , target : int ) - > List [ List [ int ] ] : # solution one: sliding window i , j = 1 , 1 sum = 0 res = [ ] while i <=

刷题35(力扣2道题+牛客1道题)

泪湿孤枕 提交于 2020-03-06 17:20:42
65. 面试题57 - II. 和为s的连续正数序列 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/he-wei-sde-lian-xu-zheng-shu-xu-lie-lcof 题目描述 输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。 序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。 示例1 输入:target = 9 输出:[[2,3,4],[4,5]] 示例2 输入:target = 15 输出:[[1,2,3,4,5],[4,5,6],[7,8]] 限制: 1 <= target <= 10^5 关键技术 滑动窗口 题目分析 设置滑动窗口的左边界和右边界默认值分别为1,2。 求滑动窗口的左边界到右边界的和sum(包括左边界到右边界)。 判断target和sum的大小,如果sum == target,把右边界往右移一位(right++),如果sum > target,把左边界往右移一位(left++),如果sum < target,把右边界往右移一位(right++)。 循环终止条件:右边界大于Math.ceil(target/2)+1。 /** * @param {number} target * @return {number[][]} */

Leetcode 打卡题

爷,独闯天下 提交于 2020-03-06 15:54:31
面试题57 - II. 和为s的连续正数序列 题面 输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。 序列内的数字由小到大排列,不同序列按照首个数字从小到大排列输出 思路 第一个想到的做法就是就是枚举 。就提就是最外面一个死循环,循环里从数字1 开始枚举 从1加到n 每加一次就将加的数push 到一个一维数组中,如果和等于target 就将这个一维数组push到二维数组中。如果和大于target 就break. vector < vector < int >> findContinuousSequence ( int target ) { vector < vector < int > > ans ; int lim = ( target - 1 ) / 2 ; for ( int i = 0 ; i <= lim ; i ++ ) { int sum = 0 , f = i + 1 ; vector < int > v ; while ( true ) { sum + = f ; v . push_back ( f ) ; ++ f ; if ( sum == target ) { if ( v . size ( ) >= 2 ) ans . push_back ( v ) ; break ; } if ( sum > target

发布SpringBoot程序的Shell脚本

谁说胖子不能爱 提交于 2020-03-06 12:48:28
#!/usr/bin/bash # 开发环境的部署脚本,没有回滚和判断是否已发布 DATE=$(date +%Y-%m-%d-%H-%M-%S) TARGET_SERVER="10.1.11.110" SOURCE_DIR=/opt TARGET_DIR=/data/yesway-cloud/${JOB_NAME} # 使用了git parameters插件 NAME=${DATE}-${git_branch/\//-} # 进入工作目录 cd_workspace() { cd ${WORKSPACE} } # 部署 scp_server() { for hosts in $TARGET_SERVER do # 拷贝到目标机 echo 'copy to target server......' scp target/*.jar root@${hosts}:/opt/${NAME}.jar ssh root@${hosts} "mkdir -p ${TARGET_DIR}/${NAME} && \ mv /opt/${NAME}.jar ${TARGET_DIR}/${NAME} && \ rm -f ${TARGET_DIR}/${JOB_NAME}.jar && \ ln -s ${TARGET_DIR}/${NAME}/${NAME}.jar ${TARGET_DIR}/$