文章目录
一开始忘记之前的思路了,看来还是要多复习
这道题也可以理解为双指针。因为原数组是非递减的,所以最左小,最右大,但同时,最左可能是负数,负数最小时,它的绝对值是最大。新数组存的是平方,因此,最大的平方只可能由数组两端的数字生成。
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
// 快慢指针
// 因为原数组是非递减的,所以最左小,最右大
// 最左可能是负数,负数最小时,它的绝对值是最大
// 求的是平方,因此,最大的平方只可能由数组两端的数字生成
int left = 0;
int right = nums.size() - 1;
vector<int> results(nums.size());
for(int i = nums.size() -1; i >= 0; i--) {
if (abs(nums[left]) >= abs(nums[right])) {
results[i] = nums[left] * nums[left];
left ++;
}
else {
results[i] = nums[right] * nums[right];
right --;
}
}
return results;
}
};
第一遍自己写的时候,超时了,可能还是因为没有很好地掌握滑动窗口思想
滑动窗口就是用两个指针不断地调节子序列的起始位置和终止位置
用一个for做2个for的工作
for循环里的变量代表着滑动窗口的终止位置
起始位置用动态移动的思路去移动
关键重点在于如何调整窗口起点位置
当窗口内元素之和满足条件时就应该调整起点了。
如果用一个for循环,那么应该表示 滑动窗口的起始位置,还是终止位置。
如果只用一个for循环来表示 滑动窗口的起始位置,那么如何遍历剩下的终止位置?此时难免再次陷入 暴力解法的怪圈。所以
只用一个for循环,那么这个循环的索引,一定是表示滑动窗口的终止位置。
复习后再写还出现了一个错误:
AddressSanitizer: SEGV on unknown address
错误出现原因是下标越界,数组操作中出现的错误,后来发现是没有声明left的初始值,直接right-left,出现错误
在声明变量时,最好再规定一下初始值
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int left =0;
int right;
int result = INT32_MAX;
int sum = 0;
int len = 0;
for (right = 0; right < nums.size(); right ++) {
sum += nums[right];
while (sum >= target) {
len = right - left + 1;
result = len < result? len: result;
sum -= nums[left++];
}
}
return result == INT32_MAX?0:result;
}
};
INT32_MAX循环不变量原则
主要是忘记了一共会循环n/2圈
螺旋矩阵的规律是,最终生成的是一个n*n的矩阵
如果n是奇数的话,最中间的位置会遍历不到,所以要自己单独赋值
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
// 保持一个固定的规律,be like 前闭后开
vector<vector<int>> result(n,vector<int>(n,0));
int loop = n/2;
int x = 0;
int y = 0;
int count = 1;
int mid = n/2;
int offset = 1;
int i,j;
while (loop --)
{
i = x;
j = y;
for (j = y; j < n - offset; j ++){
result[x][j] = count;
count ++;
}
for (i = x; i < n - offset; i ++) {
result[i][j] = count;
count ++;
}
for (; j > y; j--) {
result[i][j] = count;
count++;
}
for (; i > x; i--) {
result[i][j] = count;
count ++;
}
x++;
y++;
offset ++;
}
if (n%2==1){
result[mid][mid] = count;
}
return result;
}
};
在我的Rails(2.3,Ruby1.8.7)应用程序中,我需要将字符串截断到一定长度。该字符串是unicode,在控制台中运行测试时,例如'א'.length,我意识到返回了双倍长度。我想要一个与编码无关的长度,以便对unicode字符串或latin1编码字符串进行相同的截断。我已经了解了Ruby的大部分unicode资料,但仍然有些一头雾水。应该如何解决这个问题? 最佳答案 Rails有一个返回多字节字符的mb_chars方法。试试unicode_string.mb_chars.slice(0,50)
我有多个ActiveRecord子类Item的实例数组,我需要根据最早的事件循环打印。在这种情况下,我需要打印付款和维护日期,如下所示:ItemAmaintenancerequiredin5daysItemBpaymentrequiredin6daysItemApaymentrequiredin7daysItemBmaintenancerequiredin8days我目前有两个查询,用于查找maintenance和payment项目(非排他性查询),并输出如下内容:paymentrequiredin...maintenancerequiredin...有什么方法可以改善上述(丑陋的)代
我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123
我的代码目前看起来像这样numbers=[1,2,3,4,5]defpop_threepop=[]3.times{pop有没有办法在一行中完成pop_three方法中的内容?我基本上想做类似numbers.slice(0,3)的事情,但要删除切片中的数组项。嗯...嗯,我想我刚刚意识到我可以试试slice! 最佳答案 是numbers.pop(3)或者numbers.shift(3)如果你想要另一边。 关于ruby-多次弹出/移动ruby数组,我们在StackOverflow上找到一
我需要读入一个包含数字列表的文件。此代码读取文件并将其放入二维数组中。现在我需要获取数组中所有数字的平均值,但我需要将数组的内容更改为int。有什么想法可以将to_i方法放在哪里吗?ClassTerraindefinitializefile_name@input=IO.readlines(file_name)#readinfile@size=@input[0].to_i@land=[@size]x=1whilex 最佳答案 只需将数组映射为整数:@land边注如果你想得到一条线的平均值,你可以这样做:values=@input[x]
我正在使用puppet为ruby程序提供一组常量。我需要提供一组主机名,我的程序将对其进行迭代。在我之前使用的bash脚本中,我只是将它作为一个puppet变量hosts=>"host1,host2"我将其提供给bash脚本作为HOSTS=显然这对ruby不太适用——我需要它的格式hosts=["host1","host2"]自从phosts和putsmy_array.inspect提供输出["host1","host2"]我希望使用其中之一。不幸的是,我终其一生都无法弄清楚如何让它发挥作用。我尝试了以下各项:我发现某处他们指出我需要在函数调用前放置“function_”……这
这个问题在这里已经有了答案:Checktoseeifanarrayisalreadysorted?(8个答案)关闭9年前。我只是想知道是否有办法检查数组是否在增加?这是我的解决方案,但我正在寻找更漂亮的方法:n=-1@arr.flatten.each{|e|returnfalseife
我有一个这样的哈希数组:[{:foo=>2,:date=>Sat,01Sep2014},{:foo2=>2,:date=>Sat,02Sep2014},{:foo3=>3,:date=>Sat,01Sep2014},{:foo4=>4,:date=>Sat,03Sep2014},{:foo5=>5,:date=>Sat,02Sep2014}]如果:date相同,我想合并哈希值。我对上面数组的期望是:[{:foo=>2,:foo3=>3,:date=>Sat,01Sep2014},{:foo2=>2,:foo5=>5:date=>Sat,02Sep2014},{:foo4=>4,:dat
我正在尝试在Ruby中制作一个cli应用程序,它接受一个给定的数组,然后将其显示为一个列表,我可以使用箭头键浏览它。我觉得我已经在Ruby中看到一个库已经这样做了,但我记不起它的名字了。我正在尝试对soundcloud2000中的代码进行逆向工程做类似的事情,但他的代码与SoundcloudAPI的使用紧密耦合。我知道cursesgem,我正在考虑更抽象的东西。广告有没有人见过可以做到这一点的库或一些概念证明的Ruby代码可以做到这一点? 最佳答案 我不知道这是否是您正在寻找的,但也许您可以使用我的想法。由于我没有关于您要完成的工作
我有一个驼峰式字符串,例如:JustAString。我想按照以下规则形成长度为4的字符串:抓取所有大写字母;如果超过4个大写字母,只保留前4个;如果少于4个大写字母,则将最后大写字母后的字母大写并添加字母,直到长度变为4。以下是可能发生的3种情况:ThisIsMyString将产生TIMS(大写字母);ThisIsOneVeryLongString将产生TIOV(前4个大写字母);MyString将生成MSTR(大写字母+tr大写)。我设法用这个片段解决了前两种情况:str.scan(/[A-Z]/).first(4).join但是,我不太确定如何最好地修改上面的代码片段以处理最后一种