Leetcode - 3Sum Smaller

My code:

public class Solution {
    public int threeSumSmaller(int[] nums, int target) {
        int ret = 0;
        Arrays.sort(nums);
        for (int i = 0; i < nums.length - 2; i++) {
            int begin = i + 1;
            int end = nums.length - 1;
            int tar = target - nums[i];
            while (begin < end) {
                int sum = nums[begin] + nums[end];
                if (sum < tar) {
                    ret += end - begin;
                    begin++;
                }
                else {
                    end--;                    
                }
            }
        }
        
        return ret;
    }
}

一開始我是拿brute force來求解的。
后來突然想起來了可以排序。然后這個做法就自然而然出來了。

reference:
https://leetcode.com/articles/3sum-smaller/

還有種做法就是用binary search,
定住 i,j, binary search k so that nums[k] < target - nums[i] - nums[j]

find the biggest k

注意這里寫binary search, mid = (begin + end + 1) / 2;
以防止進入死循環。

Anyway, Good luck, Richardo! -- 09/05/2016

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 背景 一年多以前我在知乎上答了有關LeetCode的問題, 分享了一些自己做題目的經驗。 張土汪:刷leetcod...
    土汪閱讀 12,766評論 0 33
  • LeetCode 刷題隨手記 - 第一部分 前 256 題(非會員),僅算法題,的吐槽 https://leetc...
    蕾娜漢默閱讀 17,899評論 2 36
  • [ 80 questions / 3 ~= 27 a month..ok.. ] 1.29: remove_dup...
    陳十十閱讀 517評論 0 1
  • 1. Two Sum 用hash可以得到O(n)時間的解法,用python中的enumerate函數,可以獲得元素...
    Morphiaaa閱讀 445評論 0 0
  • 每天給自己任務,督促自己要去完成。 每天聽《伯凡時間》,智慧的語錄,總是發人深省。 每天聽《冬吳相對論》,對話中碰...
    Cynthia雯霏閱讀 834評論 0 0