程序地带

2021-01-18


// max保存的是全局最大子序列和,pre保存的是包含nums[n-1]的n-1序列最大连续子序列
int max = nums[0];
int pre = 0;
for (int i = 1; i < nums.length; i++)
{
// 先对pre做维护
if (nums[i] + pre >= nums[i])// 其实就是前面是个正数
{
pre = nums[i] + pre;
}
else if (nums[i] + pre < nums[i])
{
pre = nums[i];
}
// 比较一下新的pre和原来最大的max谁大
max = Math.max(max, pre);
}
return max;
class Solution {
public String multiply(String num1, String num2)
{
if (num1.equals("0") || num2.equals("0"))
{
return "0";
}
StringBuffer[] sb = new StringBuffer[num2.length()];// 最终有下面那个数那么多个
for (int j = 0; j < num2.length(); j++)
{
sb[j] = new StringBuffer();
}
int j = num2.length() - 1;
int k = 0;
while (j >= 0)
{
int i = num1.length() - 1;
int n2 = num2.charAt(j) - '0';
int check = 0;
while (i >= 0)
{
int n1 = num1.charAt(i) - '0';
int temp = n1 * n2 + check;
check = temp / 10;
sb[k] = sb[k].append(temp % 10);
--i;
}
if (check > 0)
{
sb[k] = sb[k].append(check);
}
sb[k] = sb[k].reverse();
for (int q = 0; q < k; q++)
{
sb[k] = sb[k].append("0");
}
++k;
--j;
}
StringBuffer sum = new StringBuffer("0");
for (int p = 0; p < sb.length; p++)
{
sum = addStrings(sum, sb[p]);
}
return sum.toString();
}
public static StringBuffer addStrings(StringBuffer num1, StringBuffer num2)
{
StringBuffer sb = new StringBuffer();
int i = num1.length() - 1, j = num2.length() - 1;
int check = 0;
while (i >= 0 || j >= 0)
{
// 一长一短的字符串,如果有一个字符串循环结束,则用0补全
int n1 = i >= 0 ? num1.charAt(i) - '0' : 0;
int n2 = j >= 0 ? num2.charAt(j) - '0' : 0;
int temp = n1 + n2 + check;
// 如果大于10则,需要进位,此时check为1,不需要进位时,check为0;
check = temp / 10;
// 这个时倒叙的结果
sb = sb.append(temp % 10);
--i;
--j;
}
// 最终看一下最后一次计算需不需要进位 01+99=100
if (check == 1)
{
sb = sb.append('1');
}
return sb.reverse();
}
}
class Solution {
public List<List<Integer>> permute(int[] nums) {
List<List<Integer>> res = new ArrayList<List<Integer>>();
List<Integer> output = new ArrayList<Integer>();
for (int num : nums) {
output.add(num);
}
int n = nums.length;
backtrack(n, output, res, 0);
return res;
}
public void backtrack(int n, List<Integer> output, List<List<Integer>> res, int first) {
// 所有数都填完了
if (first == n) {
res.add(new ArrayList<Integer>(output));
}
for (int i = first; i < n; i++) {
// 动态维护数组
Collections.swap(output, first, i);
// 继续递归填下一个数
backtrack(n, output, res, first + 1);
// 撤销操作
Collections.swap(output, first, i);
}
}
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_46332021/article/details/112761011

随机推荐

file upload 攻防世界_攻防世界-upload1

先打开实验环境实验准备:Firefox浏览器+Burp+蚁剑Burp:用于代理浏览器处理的http信息蚁剑:用于一句话木马的文件连接1.1这里选择后缀名为p...

weixin_39710991 阅读(660)

matlabplot用指定颜色_MATLAB Plot 如何自定义颜色

MATLABPlot如何自定义颜色Tip:Matlab作图时最好保存成fig格式,便于以后修改。写论文是一个漫长的过程,成文后最重要的一个问题就是如何让自己的论文排版和插图...

来自星星的龙 阅读(674)