本节内容以习题的形式呈现
给定一个包含n个整数的数组nums,判断数组nums是否有a,b,c,使得a+b+c=0?找出所有满足条件且不重复的三元组。
例如,给定数组nums={-1,0,1,2,-1,-4};满足上述要求的三元组为
[
[ -1,0,1 ]
[-1,-1,2 ]
]
public List<List<Integer>>threeSums(int[]nums)
Arrays.sort(nums) [-4,-1,-1,0,1,2]
i j k
i~[0,length-2] nums[i]+nums[j]+nums[k]
j=i+1;
k=nums.length-1; <0;j++;
while(j<k)
{ ==0;找到了一个结果
} >0 k--
for(int i=0;i<nums.length-2;i++)
{
int j=i+1;
int k=nums.length-1;
while(j<k)
{ .....}
while(i<nums.length-2&&nums[i]=nums[i+1])
{
i++;
}
}
while(j<k&&nums[i]+nums[j]+nums[k]<0)
{
j++;
}
if(j>=k)
{
break;
}
if(nums[i]+nums[j]+nums[k]==0)
{
List<Integer>e=new ArrayList<>();
e.add(nums[i]);
e.add(nums[j]);
e.add(nums[k]);
result.add(e);
while(i<k&&nums[j]==nums[j+1])
{
j++;
}
j++;
}
while(j<k&&nums[i]+nums[j}+nums[k]<0)
{
k--;
}
if(j>k)
{
break;
}
if(nums[i]+nums[j]+nums[k]==0)
{
List<Integer>e=new ArrayList<>();
e.add(nums[i]);
e.add(nums[j]);
e.add(nums[k]);
result.add(e);
while(j<k&&nums[k]==nums[k-1])
{
k--;
}
k--;
}
1.括号匹配
遍历字符串
遇到左括号入栈
遇到右括号
如果栈为空,说明右括号多了。 不匹配
否则出栈 , 左右括号不匹配
如果栈内还有元素,说明左括号多了 不匹配。
否则匹配
2.用队列实现栈
3.用栈实现队列
4.最小栈