• 【leetcode】-两数之和


    给定一个整数数列,找出其中和为特定值的那两个数。

    你可以假设每个输入都只会有一种答案,同样的元素不能被重用。

    给定 nums = [2, 7, 11, 15], target = 9
    
    因为 nums[0] + nums[1] = 2 + 7 = 9
    所以返回 [0, 1]
    

      

    //两层循环,当前元素和当前元素的下一个元素相加并比较
    //暴力解法  时间复杂度: O(N^2)
    
    function twoSum($arr,$target){
    	for($i=0;$i<count($arr);$i++){
    		for($j=$i+1;$j<count($arr)-$i;$j++){
    			if($arr[$i]+$arr[$j]==$target){
    					return [$i,$j];
    			}
    		}
    	}
    
    }
    

      

    思路二:
    数组必须有序
    维护两个指针,一个指向数组头,一个指向数组尾
    两个指针指向的值相加sum
    if sum>target 则尾指针往前移动
    is sum<target 则头指针后移
    
    function twoSum($arr,$target){
    	$i = 0;
    	$j = count($arr)-1;
    	while ($i<count($arr) && $j>=0) {
    		# code...
    		if($arr[$i] + $arr[$j]== $target){
    			return [$i,$j];
    		}elseif($arr[$i] + $arr[$j] > $target){
    			$j--;
    		}else{
    			$i++;
    		}
    
    	}
    }
    

      思路三:

    用target和数组中每个元素相减的值存在一个新数组中,循环遍历$arr看是否有相减后的值存在临时数组中,如存在就返回存在值的键和当前减去值的键

    $arr = [2, 7, 11, 15, 18, 31]; $target = 33; $ret = $bu_arr = []; foreach ($arr as $k=>$v){ if(in_array($v, $bu_arr) && array_search($v, $bu_arr)!=$k){ $ret[] = array_search($v, $bu_arr); $ret[] = $k; } $bu_arr[] = $target - $v; } print_R($ret);

      

  • 相关阅读:
    共用体
    位运算符和位运算
    python中while循环
    c语言中求多个整数的和及其平均值
    c语言中switch语句
    python中删除列表中多次重复的元素
    python中while循环
    python中break语句
    使用用户输入来填充字典
    python中while循环使用标志
  • 原文地址:https://www.cnblogs.com/oceanL/p/8796089.html
Copyright © 2020-2023  润新知