Leetcode(一)两数之和
2023-12-14 10:46:48
两数之和
暴力
双层循环 两两相加 等于目标值 返回 即可
class Solution {
public int[] twoSum(int[] nums, int target) {
for(int i=0;i<nums.length;i++){
for(int j=0;j<nums.length;j++){
if(nums[i]+nums[j]==target && i!=j){
int[] a={i,j};
return a;
}
}
}
return null;
}
}
map
class Solution {
public int[] twoSum(int[] nums, int target) {
HashMap<Integer,Integer> map=new HashMap();
int[] res=new int[2];
for(int i=0;i<nums.length;i++){
int a=target-nums[i];
if(map.get(a)==null){
map.put(nums[i],i);
}else{
res[0]=i;
res[1]=map.get(a);
}
}
return res;
}
}
快慢指针
class Solution {
public int[] twoSum(int[] nums, int target) {
//快速排序 O(nlogn)
int[] copy=new int[nums.length];
for(int t=0;t<nums.length;t++){
copy[t]=nums[t];
}
Arrays.sort(nums);
int[] res=new int[2];
//快慢指针
int j=nums.length-1;
int i=0;
while(i<nums.length){
if(i==j)
{
return null;
}
if(nums[i]+nums[j]<target){
i++;
}else if(nums[i]+nums[j]>target){
j--;
}else{
res[0]=i;
res[1]=j;
break;
}
}
if(res[0]!=0||res[1]!=0){
Boolean m=true;
Boolean q=true;
for(int k=0;k<nums.length;k++){
if(copy[k]==nums[res[0]]&& m)
{
res[0]=k;
m=false;
}else if(copy[k]==nums[res[1]] && q)
{
res[1]=k;
q=false;
}
}
}
return res;
}
}
作者声明
如有问题,欢迎指正!
文章来源:https://blog.csdn.net/weixin_45247019/article/details/127166372
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!