基础算法1

基础算法01----------求和项

 

package suanfa;
​
import java.util.HashMap;
import java.util.Map;
​
public class theday1 {
            /*给定一个数组和一个目标和,从数组中找到两个数字相加等于目标和,输出这两个数字的下标
            Given nums=[2,7,11,15],target=9;
            because nums[0]+nums[1]=2+79;
            return[0,1].
             */
​
    private static int[] seed1(int[] nums,int target){
        int[] result=new int[2];
        for (int i = 0; i < nums.length; i++) {
            for(int j=nums.length-1;j>i;j--){
            if (nums[i]+nums[j]==target){
                result[0]=i;
                result[1]=j;
            }
            }
        }
​
        return result;
    }
    private static int[] seed2(int[] nums,int target){
    //  Hashmap集合算法         通过键(数组值)找值(数组下标)
    Map<Integer,Integer> map= new HashMap<>();
         int[] arr =new int[2];
        for (int i = 0; i < nums.length; i++) {
            map.put(nums[i],i);
        }
        for (int i = 0; i < nums.length; i++) {
            int value=target-nums[i];
            if(map.containsKey(value)&&map.get(value)!=i){
                arr[0]=i;
                arr[1]=map.get(value);
                return arr;
            }
        }
        return arr;
    }
    private static int[] seed3(int[] nums,int target){
     //   解法2进阶版    思路跃进   循环先进行后填充map
        Map<Integer,Integer> map=new HashMap<>();
        int[] result =new int[2];
        for (int i = 0; i < nums.length; i++) {
            int value=target-nums[i];
            if(map.containsKey(value)){
              result[0]=i;
              result[1]=map.get(value);
              return result;
            }
            map.put(nums[i],i);
        }
        throw new IllegalMonitorStateException("there any two sum solution");
    }
    public static void init(){
        int[] nums={2,7,11,15};
        int target=30;
​
        int[] ints = seed3(nums, target);
        for (int i = 0; i < ints.length; i++) {
            System.out.println(ints[i]);
        }
    }
    public static void main(String[] args) {
        theday1.init();
    }
​
}
​
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值