zoukankan      html  css  js  c++  java
  • 【JAVA、C++】LeetCode 016 3Sum Closest

    Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each input would have exactly one solution.

        For example, given array S = {-1 2 1 -4}, and target = 1.

        The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).

    同上题,没上一题难,比葫芦画瓢即可

    JAVA实现:

    static public int threeSumClosest(int[] nums, int target) {
    		int result = nums[0] + nums[1] + nums[2];
    		Arrays.sort(nums);
    		for (int i = 0; i < nums.length - 2; i++) {
    			int j = i + 1, k = nums.length - 1;
    			while (j < k) {
    				if (Math.abs(nums[i] + nums[j] + nums[k] - target) < Math.abs(result - target))
    					result = nums[i] + nums[j] + nums[k];
    				if (nums[i] + nums[j] + nums[k] < target)
    					j++;
    				else if (nums[i] + nums[j] + nums[k] > target)
    					k--;
    				else
    					return target;
    				//不加while循环亦可通过测试,但是时间会偏长一些
    				while (i < k && nums[i] == nums[i + 1])
    					i++; 
    			}
    		}
    		return result;
    	}
    

     C++:

     1 class Solution {
     2 public:
     3     int threeSumClosest(vector<int>& nums, int target) {
     4         int result = nums[0] + nums[1] + nums[2];
     5         sort(nums.begin(),nums.end());
     6         for (int i = 0; i < nums.size() - 2; i++) {
     7             int j = i + 1, k = nums.size() - 1;
     8             while (j < k) {
     9                 if (abs(nums[i] + nums[j] + nums[k] - target) < abs(result - target))
    10                     result = nums[i] + nums[j] + nums[k];
    11                 if (nums[i] + nums[j] + nums[k] < target)
    12                     j++;
    13                 else if (nums[i] + nums[j] + nums[k] > target)
    14                     k--;
    15                 else
    16                     return target;
    17                 while (i < k && nums[i] == nums[i + 1])
    18                     i++;
    19             }
    20         }
    21         return result;
    22     }
    23 };
  • 相关阅读:
    python常用函数年初大总结
    Linux系统巡检常用命令
    码率
    视频码率计算问题
    Python快速教程
    MFC消息机制
    MySQL多表查询
    VoIP的话音质量测量方法
    用Py2exe打包Python脚本简单介绍
    在Eclipse中执行Andorid test preject提示The connection to adb is down, and a severe error has occured.解决方法
  • 原文地址:https://www.cnblogs.com/tonyluis/p/4466944.html
Copyright © 2011-2022 走看看