mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-09 02:53:31 +08:00
Merge pull request #1506 from chenwingsing/master
修改 (0018.四数之和)JAVA版本的sum数据类型,更新[0015.三数之和]解题描述部分,更新[0151.翻转字符串里的单词]错别字
This commit is contained in:
@ -95,7 +95,7 @@ public:
|
|||||||
|
|
||||||
拿这个nums数组来举例,首先将数组排序,然后有一层for循环,i从下标0的地方开始,同时定一个下标left 定义在i+1的位置上,定义下标right 在数组结尾的位置上。
|
拿这个nums数组来举例,首先将数组排序,然后有一层for循环,i从下标0的地方开始,同时定一个下标left 定义在i+1的位置上,定义下标right 在数组结尾的位置上。
|
||||||
|
|
||||||
依然还是在数组中找到 abc 使得a + b +c =0,我们这里相当于 a = nums[i] b = nums[left] c = nums[right]。
|
依然还是在数组中找到 abc 使得a + b +c =0,我们这里相当于 a = nums[i],b = nums[left],c = nums[right]。
|
||||||
|
|
||||||
接下来如何移动left 和right呢, 如果nums[i] + nums[left] + nums[right] > 0 就说明 此时三数之和大了,因为数组是排序后了,所以right下标就应该向左移动,这样才能让三数之和小一些。
|
接下来如何移动left 和right呢, 如果nums[i] + nums[left] + nums[right] > 0 就说明 此时三数之和大了,因为数组是排序后了,所以right下标就应该向左移动,这样才能让三数之和小一些。
|
||||||
|
|
||||||
|
@ -158,7 +158,7 @@ class Solution {
|
|||||||
int left = j + 1;
|
int left = j + 1;
|
||||||
int right = nums.length - 1;
|
int right = nums.length - 1;
|
||||||
while (right > left) {
|
while (right > left) {
|
||||||
int sum = nums[i] + nums[j] + nums[left] + nums[right];
|
long sum = (long) nums[i] + nums[j] + nums[left] + nums[right];
|
||||||
if (sum > target) {
|
if (sum > target) {
|
||||||
right--;
|
right--;
|
||||||
} else if (sum < target) {
|
} else if (sum < target) {
|
||||||
|
@ -79,7 +79,7 @@ void removeExtraSpaces(string& s) {
|
|||||||
|
|
||||||
逻辑很简单,从前向后遍历,遇到空格了就erase。
|
逻辑很简单,从前向后遍历,遇到空格了就erase。
|
||||||
|
|
||||||
如果不仔细琢磨一下erase的时间复杂读,还以为以上的代码是O(n)的时间复杂度呢。
|
如果不仔细琢磨一下erase的时间复杂度,还以为以上的代码是O(n)的时间复杂度呢。
|
||||||
|
|
||||||
想一下真正的时间复杂度是多少,一个erase本来就是O(n)的操作,erase实现原理题目:[数组:就移除个元素很难么?](https://programmercarl.com/0027.移除元素.html),最优的算法来移除元素也要O(n)。
|
想一下真正的时间复杂度是多少,一个erase本来就是O(n)的操作,erase实现原理题目:[数组:就移除个元素很难么?](https://programmercarl.com/0027.移除元素.html),最优的算法来移除元素也要O(n)。
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user