Array
Kompleksitas Operasi
Contoh Implementasi: Two Pointers Technique
package main
import (
"fmt"
"sort"
)
// TwoSum mencari dua angka dalam array yang jika dijumlahkan sama dengan target
// Kompleksitas Waktu: O(n log n) untuk sorting + O(n) untuk two pointers = O(n log n)
// Kompleksitas Ruang: O(1) jika tidak menghitung space untuk sorting
func TwoSum(nums []int, target int) []int {
// Pertama kita sort array agar bisa menggunakan two pointers
// Ini memungkinkan kita untuk bergerak dengan logika: jika sum terlalu besar,
// gerakkan pointer kanan ke kiri; jika terlalu kecil, gerakkan pointer kiri ke kanan
sort.Ints(nums)
left := 0
right := len(nums) - 1
// Loop selama pointer belum bertemu
for left < right {
currentSum := nums[left] + nums[right]
if currentSum == target {
// Kita menemukan pasangan yang tepat
return []int{nums[left], nums[right]}
} else if currentSum < target {
// Sum terlalu kecil, perlu angka yang lebih besar
// Karena array sudah sorted, gerakkan pointer kiri ke kanan
left++
} else {
// Sum terlalu besar, perlu angka yang lebih kecil
// Gerakkan pointer kanan ke kiri
right--
}
}
// Tidak ada pasangan yang ditemukan
return []int{}
}
// IsPalindrome memeriksa apakah string adalah palindrome
// Kompleksitas Waktu: O(n) karena kita hanya perlu memeriksa setengah string
// Kompleksitas Ruang: O(1) karena hanya menggunakan dua pointer
func IsPalindrome(s string) bool {
left := 0
right := len(s) - 1
// Bandingkan karakter dari kedua ujung bergerak ke tengah
for left < right {
if s[left] != s[right] {
return false
}
left++
right--
}
return true
}Studi Kasus: Mencari Subarray dengan Sum Maksimum (Kadane's Algorithm)
Penjelasan Kompleksitas Kadane's Algorithm
Last updated