167. Two Sum II - Input array is sorted

class Solution { public int[] twoSum(int[] numbers, int target)

 { int left=0;int right=numbers.length-1; 

while(left<right)

{ if(numbers[left]+numbers[right]==target)break; 

if(numbers[left]+numbers[right]<target)left++; 

else right--; } return int[]{left+1,right+1}; }}





上面这种方法首先设了两个索引值 一个设为numbers数组的首索引,一个设在结尾的length-1然后如果两个索引值加起来 不等于target的话 就查看其值如果小于target 则左边 (因为该数组为已排序的数组 ,所以最前面的值必然是最小的)的索引后移如果大于target 则右边(最后面必然是最大的)的索引前移该方法最理想的时间复杂度是o(1)       平均复杂度大约是o(n)最坏的情况是需要右移或者左移遍历整个数组才能找到答案刚开始做的时候 我的思路是while这步 直接while(numbers[left]+numbers[right]==target)刚开始自己觉得没问题 后来才发现 如果这样做判断 假设第一步不等于 那么将无法做接下来的迭代,例如寻找更小索引的数另外有一种想法是用二分查找做 但是这种方法的时间复杂度是o(n*logn)故此没有优于上面的算法 没有实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值