101 / 205
LeetCode · MediumO'rta20 ball· ~25 daqiqa

3Sum

Butun sonlardan iborat nums massivi berilgan. Uning ichidan nums[i] + nums[j] + nums[k] == 0 va i != j, i != k, j != k shartlarni qanoatlantiruvchi barcha har xil uchliklarni toping. Javobda dublikat uchliklar bo'lmasligi kerak.

example.go
func solve(nums []int) [][]int {
    // ...
}

Misollar

kod
Input: nums = [-1,0,1,2,-1,-4]
Output: [[-1, -1, 2], [-1, 0, 1]]
kod
Input: nums = [0,1,1]
Output: []
kod
Input: nums = [0,0,0]
Output: [[0, 0, 0]]

Maslahatlar

  1. Massivni avval saralab oling — shunda har bir elementni "asosiy" son sifatida tanlab, qolgan ikkitasini topish uchun ikki ko'rsatkich (two pointers) usulidan foydalanish mumkin bo'ladi.
  2. nums ni sort qiling; har bir i uchun l=i+1, r=n-1 dan boshlang: yig'indi 0 dan kichik bo'lsa l++, katta bo'lsa r--, teng bo'lsa natijaga qo'shib l va r ni ichkariga suring va bir xil qiymatlarni o'tkazib yuborib dublikatlarning oldini oling.