Java DSA & Logic Interview Questions - Complete Solutions
Java DSA & Logic Interview Questions - Complete Solutions
Solutions
Core Array & String Problems
1. Find the kth largest/smallest element in an array
Question: Given an array of integers, find the kth largest element.
java
pp uu bb ll ii cc ii nn tt
findKthLargest((iinntt[[]]
nnuummss,, ii nn tt kk )) {{
AA rrrraa yyss.. sort((nnuumm ss));;
rreettuurrnn nnuummss[[nnuummss..lleennggtthh - kk]];;
}}
// Time: O(n log n), Space: O(1)
Approach 2 - Min Heap (Optimal):
java
pp uu bb ll ii cc ii nn tt findKthLargest((iinntt[[]] nnuummss,,
ii nn tt kk )) {{ PPrriioorriittyyQQuueeuuee<<Integer>
mmiinnHHeeaapp = nneeww
PPrriioorriittyyQQuueeuuee<<>>(());; ff oo rr (( ii nn tt
nnuumm : nnuummss)) {{
mmiinnHHeeaapp..offer((nnuumm));;
iiff ((minHeap.size(()) > kk )) {{
mm iinnHHeeaa pp.. poll(());;
}}
}}
rreettuurrnn mm iinnHHeeaa pp.. peek(());;
}}
// Time: O(n log k), Space: O(k)
jav
a
pp uu bb ll ii cc ii nn tt findK
findKthLargest(
thLargest (iinntt[[]] nnuummss,, ii nn tt kk )) {{
rr ee tt uu rr nn quickSelect(nums
quickSelect(nums,, 00 ,, nn uu mm ss.length
.length - 1,, nnuummss..lleennggtthh - kk )) ;;
}}
pp rr ii vv aa tt ee ii nn tt quickSelect(
quickSelect(iinntt[[]]
nnuummss,, int left, ii nn tt rr ii gg hh tt ,, ii nn tt kk ))
{{ iiff ((left
left == rriigghhtt)) rr ee tt uu rr nn
nn uu mm ss [[ ll ee ff tt ]] ;;
iinntt pp ii vv oo tt II nn dd ee xx =
partition(
partition (nnuummss,, lleefftt,,
rriigghhtt));; iiff ((k k ==
ppiivvoottIInnddeexx)) rreettuurrnn
nn uu mm ss [[ kk ]] ;;
ee ll ss ee iiff (k < pp ii vv oo tt II nn dd ee xx )) return quickSelect(nums,
quickSelect(nums,
lleefftt,, pp ii vv oo tt II nn dd ee xx - 11 ,, kk));; ee ll ss ee
rr ee tt uu rr nn quickSelect(
quickSelect(nnuummss,, pp ii vv oo tt II nn dd ee xx +
11,, rriigghhtt,, kk));;
}}
pp rr ii vv aa tt ee iinntt partition(
partition(iinntt[[]]
nnuummss,, iinntt lleefftt,, iinntt
rriigghhtt)) {{ iinntt pp ii vv oo tt =
nnuumm ss[[rriigghhtt]];;
iinntt ii = lleefftt;;
ff oo rr ((int
int j = lleefftt;; jj <
rr ii gg hh tt ;; jj++
++)) {{ iiff
(( nn uu mm ss [[ jj ]] <=
pp ii vv oo tt )) {{
swap(
swap (nnuum
mss,, ii,, jj));;
ii++
++;;
}}
}}
swap(
swap (nnuummss,
, ii,, rriigghhtt));;
rr ee tt uu rr nn ii;;
}}
pp rr ii vv aa tt ee vv oo ii dd
swap(
swap(iinntt[[]] nnuummss,, iinntt
ii,, iinntt jj)) {{ iinntt tteemmpp
= nn uu mm ss [[ ii ]] ;;
nnuummss[[ii]]
=
nnuummss[[jj]];
;
nn uu mm ss [[ jj ]
] = tteemmpp;;
}}
// Time: O(n) average, O(n²) worst, Space: O(1)
2. Reverse an integer array in-place (O(n) solution)
Question: Reverse an array without using extra space.
jav
a
pp uu bb ll ii cc iinntt[]
reverseArray((iinntt[[]]
aa rr rr )) {{ iinntt[[] result =
nneeww
iinntt[[aa rrrr.. lleennggtthh]]
;; ff oo rr ((int i = 00 ;; ii <
aarrrr..length;; ii++)) {{
rreessuulltt[[i] = aarrrr[[aarrrr..lleennggtthh - 11 - ii]];;
}}
rreettuurrnn rr ee ss uu ll tt ;;
Approach 2 - Two Pointer In-Place (Optimal):
java
pp uu bb ll ii cc vv oo ii dd
reverseArray((iinntt[[]] aarrrr))
{{ iinntt lleefftt = 0,,
rriigghhtt =
aarrrr..lleennggtthh - 11;;
ww hh ii ll ee ((lleefftt <
rriigghhtt)) {{
iinntt tteemmpp = aarrrr[[lleefftt]];;
aarrrr[[lleefftt]] =
aarrrr[[rriigghhtt]];;
aa rr rr [[ rr ii gg hh tt ]]
= tteemmpp;;
ll ee ff tt ++;;
jav
a
pp uu bb ll ii cc cc hh aa rr
firstNonRepeating((SSttrriinngg ss))
{{ ff oo rr ((int i = 00 ;; ii <
s.length(());; ii++)) {{
bboooolleeaann uunniiqquuee = tt rr uu ee ;;
ff oo rr ((int j = 00 ;; jj < s.length(());; jj++)) {{
iiff ((i != jj && ss.charAt(i) ==
ss..charAt((jj)))) {{ uunniiqquuee =
ff aa ll ss ee ;;
bb rr ee aa kk ;;
}}
}}
iiff ((unique) rr ee tt uu rr nn ss..charAt((ii));;
}}
rreettuurrnn '' '';;
}}
// Time: O(n²), Space: O(1)
Approach 2 - HashMap (Optimal):
java
pp uu bb ll ii cc cc hh aa rr firstNonRepeating((SSttrriinngg ss)) {{
MMaapp<<Character, IInntteeggeerr>> ffrreeqqMMaapp = nneeww
HHaasshhMMaapp<<>>(());;
// Count frequencies
ff oo rr ((char c : ss..toCharArray(()))) {{
ffrreeqqMMaapp..put(cc,, ffrreeqqMMaapp..getOrDefault((c, 00 )) + 11));;
}}
4. Print duplicate elements in array/list using Stream API & via HashMap
Question: Find and print all duplicate elements in an array.
jav
a
pp uu bb ll ii cc LLiisstt<Integer>>
findDuplicates((iinntt[[]] aa rr rr )) {{
MMaapp<<Integer, IInntteeggeerr>>
ffrreeqqMMaapp = nneeww
HHaasshhMMaapp<<>>(());; LLiisstt<<Integer>
dd uu pp ll ii cc aa tt ee ss = nneeww
AA rr rr aa yy LL ii ss tt << >> (( )) ;;
ffoorr ((Map.EEnnttrryy<<IInntteeggeerr,,
IInntteeggeerr> entry :
ffrreeqqMMaapp..entrySet(()))) {{ iiff
((entry.getValue(()) > 11 )) {{
dduupplliiccaatteess..add(eennttrryy..getKey(())));;
}}
}}
Approach 2 - Stream API (Optimal/Modern):
java
pp uu bb ll ii cc LLiisstt<Integer>>
findDuplicatesStream((iinntt[[]] aa rr rr )) {{
rr ee tt uu rr nn AArrrraayyss..stream((aarrrr))
..boxed(())
..collect(Collectors..groupingBy((FFuunnccttiioonn.identity(),,
CCoolllleeccttoorrss..counting(())))))
..entrySet(())..stream(())
..filter(entry -> ee nn tt rr yy .. getValue(( )) > 11 ))
..map((MMaapp..EEnnttrryy::getKey))
..collect((CCoolllleeccttoorrss..toList(())));;
}}
// Time: O(n), Space: O(n)
jav
a
pp uu bb ll ii cc LLiisstt<Integer>>
findDuplicatesSet((iinntt[[]] aa rr rr )) {{
SS ee tt << I n t e g e r > sseeeenn = nneeww
HHaasshhSSeett<<>>(());;
SSeett<<Integer> dd uu pp ll ii cc aa tt ee ss =
nneeww HHaasshhSSeett<<>>(());;
java
pp uu bb ll ii cc iinntt[]
separateZeros((iinntt[[]]
aa rr rr )) {{ iinntt[[] result =
nneeww
ii nn tt [[ aa rr rr .. ll ee nn gg tt hh ]]
;; ii nn tt iinnddeexx = 00 ;;
jav
a
pp uu bb ll ii cc vv oo ii dd
separateZeros((iinntt[[]]
aarrrr)) {{ ii nn tt
ii nn ss ee rr tt PP oo ss = 00 ;;
java
pp uu bb ll ii cc vv oo ii dd
separateZerosSwap((iinntt[[]]
aa rr rr )) {{ ii nn tt jj = 00 ;;
ff oo rr ((int i = 00 ;; ii <
aarrrr..length;; ii++)) {{
iiff (( aa rr rr [[ ii ]] != 00 )) {{
iinntt tteemmpp
= aarrrr[[ii]];;
aa rr rr [[ ii ]] =
aa rrrr[[jj]];;
aa rr rr [[ jj ]] =
tteemmpp;; jj+
+;;
}}
}}
jav
a
pp uu bb ll ii cc MMaapp<Integer,,
IInntteeggeerr>> countFrequency((iinntt[[]]
aa rr rr )) {{ MMaapp<<Integer,
IInntteeggeerr>> ffrreeqqMMaapp = nneeww
HHaasshhMMaapp<<>>(());; ff oo rr ((int i =
00 ;; ii < aarrrr..length;; ii++)) {{
iinntt ccoouunntt = 00;;
ff oo rr ((int j = 00 ;; jj <
aarrrr..length;; jj++)) {{
iiff ((arr[ii]] ==
aa rr rr [[ jj ]] )) {{
cc oo uu nn tt + + ;;
}}
}}
ffrreeqqMMaapp..put(aarrrr[[ii]],, cc oo uu nn tt )) ;;
}}
rreettuurrnn ffrreeqqMMaapp;;
Approach 2 - HashMap (Optimal):
java
pp uu bb ll ii cc MMaapp<Integer,,
IInntteeggeerr>> countFrequency((iinntt[[]]
aa rr rr )) {{ MMaapp<<Integer,
IInntteeggeerr>> ffrreeqqMMaapp = nneeww
HHaasshhMMaapp<<>>(());; ff oo rr (( ii nn tt
nnuumm : aa rr rr )) {{
ff rr ee qq MM aa pp .. put(nn uu mm ,, ffrreeqqMMaapp..getOrDefault((num, 00 )) + 11));;
}}
rreettuurrnn ffrreeqqMMaapp;;
}}
pp uu bb ll ii cc LLiisstt<Integer>>
findElementsWithFrequencyK((iinntt[[]] aa rr rr ,, ii nn tt kk ))
{{ MM aa pp << Integer, IInntteeggeerr>>
ffrreeqqMMaapp = countFrequency((aarrrr));;
rreettuurrnn ffrreeqqMMaapp..entrySet(())..stream(())
..filter(entry -> ee nn tt rr yy .. getValue(( )) == kk ))
..map((MMaapp..EEnnttrryy::getKey))
..collect((CCoolllleeccttoorrss..toList(())));;
jav
a
pp uu bb ll ii cc LLiisstt<Integer>>
findRepeating((LLiisstt<<IInntteeggeerr>> lliisstt))
{{ MMaapp<<Integer, IInntteeggeerr>>
ffrreeqqMMaapp = nneeww
HHaasshhMMaapp<<>>(());; LLiisstt<<Integer>
rr ee pp ee aa tt ii nn gg = nneeww
AA rr rr aa yy LL ii ss tt << >> (( )) ;;
ffoorr ((Map.EEnnttrryy<<IInntteeggeerr,,
IInntteeggeerr> entry :
ffrreeqqMMaapp..entrySet(()))) {{ iiff
((entry.getValue(()) >= 22 )) {{
rreeppeeaattiinngg..add(eennttrryy..getKey(())));;
}}
}}
Approach 2 - Stream API (Optimal):
java
pp uu bb ll ii cc LLiisstt<Integer>>
findRepeatingStream((LLiisstt<<IInntteeggeerr>>
lliisstt)) {{ rr ee tt uu rr nn lliisstt..stream(())
..collect(Collectors..groupingBy((FFuunnccttiioonn.identity(),,
CCoolllleeccttoorrss..counting(())))))
..entrySet(())..stream(())
..filter(entry -> ee nn tt rr yy .. getValue(( )) >= 22 ))
..map((MMaapp..EEnnttrryy::getKey))
..collect((CCoolllleeccttoorrss..toList(())));;
}}
// Time: O(n), Space: O(n)
jav
a
pp uu bb ll ii cc ii nn tt lengthOfLIS((iinntt[[]] nnuummss)) {{
rr ee tt uu rr nn lisRecursive(nnuummss,, 00 ,, IInntteeggeerr..MMIINN VVAALLUUEE));;
}}
pp rr ii vv aa tt ee iinntt lisRecursive((iinntt[[]]
nnuummss,, iinntt index,, iinntt pp rr ee vv ))
{{ iiff ((index == nnuummss..lleennggtthh))
rr ee tt uu rr nn 00 ;;
// Exclude current
ii nn tt eexxcclluuddee = lisRecursive((nnuummss,, iinnddeexx + 11 ,, pp rr ee vv )) ;;
java
pp uu bb ll ii cc ii nn tt
lengthOfLIS((iinntt[[]]
nnuummss)) {{ iiff
((nums.lleennggtthh ==
00 )) rr ee tt uu rr nn 00 ;;
iinntt[[] dp = nneeww
iinntt[[nnuummss..lleennggtthh]];;
AArrrraayyss..fill((ddpp,, 11));;
iinntt mmaaxxLLeenn = 11;;
ff oo rr ((int i = 11 ;; ii <
nnuummss..length;; ii++)) {{
ff oo rr ((int j = 00 ;; jj < ii;; jj+
+)) {{
iiff ((nums[ii]] > nn uu mm ss [[ jj ]] )) {{
ddpp[[i] = MMaatthh.max(dp[i]],, dd pp [[ jj ]] + 11));;
}}
}}
mmaaxxLLeenn = Math.max((mmaaxxLLeenn,, ddpp[[ii]]));;
}}
jav
a
pp uu bb ll ii cc ii nn tt
lengthOfLIS((iinntt[[]] nnuummss))
{{ LLiisstt<<Integer> ttaaiillss =
nneeww
AA rr rr aa yy LL ii ss tt << >> (( )) ;;
java
pp uu bb ll ii cc LLiisstt<List<<SSttrriinngg>>>>
groupAnagrams(Sttrriinngg[[]] ssttrrss)) {{
MMaa pp<<String,, LLiisstt<<SString>> map =
nneeww HHaasshhMMaapp<<>>(());;
mmaapp..putIfAbsent(kkeeyy,,
nneeww
AA rrrraa yyLLiisstt<<>>(())));;
mmaapp..get(kkeeyy))..add((ssttrr
)) ; ;
}}
Approach 2 - Frequency Map (Optimal):
jav
a
pp uu bb ll ii cc LLiisstt<List<<SSttrriinngg>>>>
groupAnagrams(Sttrriinngg[[]] ssttrrss)) {{
MMaa pp<<String,, LLiisstt<<SString>> map =
nneeww HHaasshhMMaapp<<>>(());;
SS tt rr ii nn gg key =
AArrrraayyss..toString((ccoouunntt
));; mmaapp..putIfAbsent(kkeeyy,,
nneeww
AA rrrraa yyLLiisstt<<>>(())));;
mm aa pp .. get(kk ee yy )) .. add(( ss tt r
r )) ; ;
}}
java
jav
a
pp uu bb ll ii cc bboooolleeaann
isPalindrome((SSttrriinngg ss)) {{
ii nn tt ll ee ff tt = 0,, rr ii gg hh tt =
ss..length(()) - 11 ;;
java
pp uu bb ll ii cc bboooolleeaann
isPalindrome((SSttrriinngg ss)) {{
ii nn tt ll ee ff tt = 0,, rr ii gg hh tt =
ss..length(()) - 11 ;;
iiff
((Character.toLowerCase((ss..charA
t((lleefftt)))) !=
CChhaarraacctteerr..toLowerCase(
ss..charAt((rriigghhtt)))))) {{
rr ee tt uu rr nn ffaallssee;;
}}
lleefft
t++;;
rriigg
pp uu bb ll ii cc LLiisstt<Integer>>
removeDuplicates((iinntt[[]] aa rr rr )) {{
LLiisstt<<Integer> rr ee ss uu ll tt = nneeww
AA rr rr aa yy LL ii ss tt << >> (( )) ;;
ff oo rr ((int i = 00 ;; ii <
aarrrr..length;; ii++)) {{
bboooolleeaann
ii ss DD uu pp ll ii cc aa tt ee =
ffaallssee;;
ff oo rr ((int j = 00 ;; jj < result.size(());; jj++)) {{
iiff ((arr[ii]] ==
rreessuulltt..get((jj))))
{{ ii ss DD uu pp ll ii cc aa
tt ee = tt rr uu ee ;;
bb rr ee aa kk ;;
}}
}}
iiff (( !
ii ss DD uu pp ll ii cc aa tt ee ))
{{ rreessuulltt..add((aar
Approach 2 - Using Set (Normal Method):
java
pp uu bb ll ii cc LLiisstt<Integer>>
removeDuplicates((iinntt[[]] aa rr rr )) {{
SSeett<<Integer> ss ee tt = nneeww
LLiinnkkeeddHHaasshhSSeett<<>>(());;
ff oo rr (( ii nn tt nnuumm : aa rr rr )) {{
ss ee tt .. add(( nn uu mm )) ;;
}}
rreettuurrnn nneeww AArrrraayyLLiisstt<<>>((sseett));;
}}
// Time: O(n), Space: O(n)
java
pp uu bb ll ii cc LLiisstt<Integer>>
removeDuplicates((iinntt[[]] aa rr rr )) {{
rr ee tt uu rr nn
AArrrraayyss..stream((aarrrr))
..distinct(())
..boxed(())
..collect((CCoolllleeccttoorrss..toList(())));;
}}
// Time: O(n), Space: O(n)
12. Print Armstrong numbers in a range
Question: Find all Armstrong numbers (narcissistic numbers) in a given range.
java
pp uu bb ll ii cc LLiisstt<Integer>>
findArmstrongNumbers((iinntt ss tt aa rr tt ,, ii nn tt eenndd))
{{ LLiisstt<<Integer> rreessuulltt = nneeww
AA rr rr aa yy LL ii ss tt << >> (( )) ;;
pp rr ii vv aa tt ee bboooolleeaann
isArmstrong((iinntt nnuumm)) {{
ii nn tt oo rr ii gg ii nn aa ll =
nnuum m ; ;
iinntt ssuumm = 00;;
iinntt ddiiggiittss = Sttrriinngg..valueOf((nnuumm))..length(());;
jav
a
pp uu bb ll ii cc LLiisstt<Integer>>
findArmstrongNumbers((iinntt ss tt aa rr tt ,, ii nn tt eenndd))
{{ LLiisstt<<Integer> rr ee ss uu ll tt = nneeww
AA rr rr aa yy LL ii ss tt << >> (( )) ;;
ff oo rr ((char c :
nnuummSSttrr..toCharArray(()
))) {{ ii nn tt dd ii gg ii tt = cc -
'' 00 '' ;;
ssuumm += Math.pow((ddiiggiitt,, dd ii gg ii tt ss )) ;;
}}
iiff ((ssuumm
==
nnuum m ) ) { {
java
pp uu bb ll ii cc iinntt nthLargest(iinntt[[]]
aarrrr,, iinntt nn )) {{
AArrrraayyss..sort((aarrrr));;
rreettuurrnn aarrrr[[aarrrr..lleennggtthh - nn]];;
}}
// Time: O(n log n), Space: O(1)
jav
a
pp uu bb ll ii cc iinntt nthLargest(iinntt[[]] aarrrr,, iinntt nn )) {{
PPrriioorriittyyQQuueeuuee<<Integer> mmiinnHHeeaapp = nneeww
PP rr ii oo rr ii tt yy QQ uu ee uu ee << >> (( )) ;;
ff oo rr (( ii nn tt nnuumm : aa rr rr ))
{{ mmiinnHHeeaapp..offer((nnu
um m ) ) ; ;
iiff ((minHeap.size(()) > nn )) {{
mm ii nn HH ee aa pp .. poll(( )) ;;
}}
}}
rreettuurrnn mm ii nn HH ee aa pp .. peek(( )) ;;
}}
// Time: O(k log n), Space: O(n)
java
pp uu bb ll ii cc iinntt
nthLargest(iinntt[[]] aarrrr,,
iinntt nn )) {{ rr ee tt uu rr nn
AArrrraayyss..stream((aarrrr)
)
..boxed(())
..sorted((CCoommppaarraattoorr..reverseOrder(())))
..skip((nn - 11 ))
..findFirst(())
..orElseThrow(());;
}}
// Or without duplicates:
pp uu bb ll ii cc ii nn tt
nthLargestDistinct(iinntt[[]] aarrrr,, ii nn tt
nn )) {{ rr ee tt uu rr nn
AArrrraayyss..stream((aarrrr))
..boxed(())
..distinct(())
..sorted((CCoommppaarraattoorr..reverseOrder(())))
..skip((nn - 11 ))
..findFirst(())
..orElseThrow(());;
}}
jav
a
pp uu bb ll ii cc LLiisstt<Integer>>
findPrimes((iinntt nn )) {{
LLiisstt<<Integer> pprriimmeess =
nneeww AA rr rr aa yy LL ii ss tt << >> (( )) ;;
pp rr ii vv aa tt ee
bboooolleeaann
isPrime((iinntt nnuumm)) {{
iiff ((nnuumm < 22 ))
rr ee tt uu rr nn ff aa ll ss ee ;;
ff oo rr ((int i = 22 ;; ii <=
Math.sqrt((nnuumm));; ii++)) {{
iiff ((num % ii == 00 ))
rr ee tt uu rr nn ff aa ll ss ee ;;
jav
a
pp uu bb ll ii cc LLiisstt<Integer>>
findPrimesSieve((iinntt nn )) {{
bb oo oo ll ee aa nn [[ ] isPrime = nneeww
bboooolleeaann[[nn + 11 ]] ;;
AArrrraayyss..fill((iissPPrriimmee,,
ttrruuee));;
iissPPrriimmee[[0] = iissPPrriimmee[[11]] = ffaallssee;;
ff oo rr ((int i = 22 ;; ii * ii
<= n;; ii++)) {{ iiff
(( ii ss PP rr ii mm ee [[ ii ]] ))
{{
ff oo rr ((int j = ii * ii;; jj <= n;; jj += ii)) {{
iissPPrriimmee[[jj]] = ffaallssee;;
}}
}}
}}
LLiisstt<<Integer> pprriimmeess =
nneeww
AA rr rr aa yy LL ii ss tt << >> (( )) ;; ff oo rr
((int i = 22 ;; ii <= nn ;; ii++)) {{
iiff ((iissPPrriimmee[[ii]])) {{
pp rr ii mm ee ss .. add(( ii )) ;;
}}
15. Find maximum salary from Employee list (via Stream max)
Question: Find the employee with the maximum salary.
jav
a
ccllaassss
EEmmppllo
oyyeeee {{
SStt rr ii nn gg
nnaammee;
;
ddoouubblle
e
ssaallaarryy
;;
ppuubblliicc EEmmppllooyyeeee((Sttrriinngg
nnaammee,, ddoouubbllee ssaallaarryy)) {{
tt hh ii ss .. nn aa mm ee = nnaammee;;
tthhiiss..ssaallaarryy = ssaallaarryy;;
}}
pp uu bb ll ii cc
ddoouubbllee
getSalary(
getSalary ()) {{
rr ee tt uu rr nn
ssaallaarryy;;
}}
}}
pp uu bb ll ii cc EEmmppllooyyeeee
findMaxSalaryEmployee(
findMaxSalaryEmployee(LLiisstt<<EEmmppllooyyeeee>>
eemmppllooyyeeeess)) {{ iiff ((employees.
employees.isEmpty
isEmpty(())))
rr ee tt uu rr nn nn uu ll ll ;;
EEmmppllooyyeeee
mmaaxxEEmmpp =
eemmppllooyyeeeess..getget((00));;
ff oo rr ((EEmmppllooyyeeee
eemmpp : eemmppllooyyeeeess))
{{
iiff ((emp.
emp.getSalary
getSalary(()) > mm aa xx EE mm pp ..getSalary
getSalary(( )) )) {{
mmaaxxEEmmpp = eemmpp;;
}}
}}
rreettuurrnn mmaaxxEEmmpp;;
}}
// Time: O(n), Space: O(1)
java
pp uu bb ll ii cc EEmmppllooyyeeee
findMaxSalaryEmployee(LLiisstt<<EEmmppllooyyeeee>>
eemmppllooyyeeeess)) {{ rr ee tt uu rr nn
eemmppllooyyeeeess..stream(())
..max(Comparator..comparingDouble((EEmmppllooyyeeee::getSalary))))
16. File splitting logic: split a large file into N parts
Question: Split a large file into N equal parts.
java
pp uu bb ll ii cc vv oo ii dd splitFile(
splitFile(SSttrriinngg iinnppuuttFFiillee,,
iinntt nnuummPPaarrttss)) tthhrroowwss
IIOOEExxcceeppttiioonn {{ FFiillee ffiillee = nneeww
FFiillee((iinnppuuttFFiillee));;
lloonngg ffiilleeSSiizzee = ffiillee..length length(());;
lloonngg ppaarrttSSiizzee = ffiilleeSSiizzee / nnuummPPaarrttss;;
tt rr yy ((FileInputStream
FileInputStream ffiiss = nneeww
FF ii ll ee II nn pp uu tt SStt rr ee aa mm (( ff ii ll ee )) ))
{{ ff oo rr ((int int i = 00 ;; ii <
nnuummPPaarrttss;; ii++ ++)) {{
SStt rr ii nn gg outputFile = ii nn pp uu tt FF ii ll ee
+ "" .. pp aa rr tt "" + ((ii + 11));; lloonngg
bb yy tt ee ss TTo o Read = ((ii ==
nnuummPPaarrttss - 11 )) ?
ffiilleeSSiizzee - ((ppaa rrttSSiizzee * ii)) : ppaarrttSSiizzee;;
ttrryy ((FileOutputStream
FileOutputStream ff oo ss = nneeww
FF ii ll ee OO uu tt pp uu tt SStt rr ee aa mm (( oo uu tt pp uu tt FF ii
ll ee )) )) {{ bb yy tt ee [[]] buffer = nneeww
bb yy tt ee [[ 88 11 99 22 ]] ;;
lloonngg bbyytteessRReeaadd = 00 ;;
iinntt ll ee nn ;;
ww hh ii ll ee ((bbyytteessRReeaadd
< bbyytteessTTooRReeaadd &&
(( ll ee nn =
fis. read((bbuuffffeerr)))) != -11 ))
fis .read
{{
iinntt tt oo WW rr ii tt ee = (iinntt))
MMaatthh..min min((lleenn,,
bbyytteessTTooRReeaadd -
bb yy tt ee ss RRee aa dd )) ;;
ffooss..write
write((bbuuffffeerr,,
00,, ttooWWrriittee));;
bbyytteessRReeaadd +=
tt oo WW rr ii tt ee ;;
}}
}}
}}
}}
}}
// Time: O(fileSize), Space: O(buffer)
Approach 2 - BufferedInputStream/OutputStream (Optimal):
jav
a
pp uu bb ll ii cc vv oo ii dd splitFileOptimized(
splitFileOptimized(SSttrriinngg
iinnppuuttFFiillee,, iinntt nnuummPPaarrttss))
tthhrroowwss IIOOEExxcceeppttiioonn {{
FFiillee ffiillee = nneeww
FFiillee((iinnppuuttFFiillee)
);; lloonngg
ff ii ll ee SS ii zz ee =
ffiillee..length
length(());;
lloonngg pp aa rr tt SS ii zz ee = ( ff ii ll ee SS ii zz ee + nnuummPPaarrttss - 1) / nnuummPPaarrttss;; //
Ceiling division
ff oo rr ((int
int i = 00 ;; ii < nnuummPPaarrttss;; ii++ ++)) {{
SStt rr ii nn gg outputFile = ii nn pp uu tt FF ii ll ee
+ "" .. pp aa rr tt "" + ((ii + 11));; lloonngg
rreemmaaiinniinngg =
MMaa tthh..min min((ppaa rrttSSiizzee,,
ffiilleeSSiizzee - ((ii * ppaarrttSSiizzee))));;
bbooss..write
write((bbuuffffeerr,,
00 ,,
bbyytteessRReeaadd));;
ww rr ii tt tt ee nn +=
bbyytteessRReeaadd;;
}}
}}
}}
}}
}}
// Time: O(fileSize), Space: O(buffer)
17. Program to count the string occurrence
Question: Count occurrences of each string in a list.
jav
a
pp uu bb ll ii cc MM aa pp <Stt rr ii nn gg ,, IInntteeggeerr>>
countOccurrences((List<SSttrriinngg>> ssttrriinnggss)) {{
MM aa pp << St r i n g ,, IInntteeggeerr>>
ccoouunnttMMaapp = nneeww
HHaasshhMMaapp<<>>(());;
java
pp uu bb ll ii cc MM aa pp <Stt rr ii nn gg ,, LLoonngg>>
countOccurrencesStream(List<<SSttrriinngg>> ss tt rr ii nn gg ss ))
{{ rr ee tt uu rr nn ssttrriinnggss..stream(())
..collect((CCoolllleeccttoorrss..groupingBy((
FFuunncc ttiioo nn.
. identity(()),,
CCoolllleeccttoorr
ss..counting(())
)))); ;
}}
jav
a
cc ll aa ss ss
LLiissttNNoo
ddee {{
ii nn tt
vv aa ll ;;
LLiissttNNoo
ddee
nneexxtt;;
LLiissttNNooddee((int val)) {{ tthhiiss..vvaall = vvaall;; }}
}}
pp uu bb ll ii cc LLiissttNNooddee
reverseList((LLiissttNNooddee hheeaadd))
{{ LLiissttNNooddee pprreevv =
nn uu ll ll ;;
LLiissttNNooddee ccuurrrr = hheeaadd;;
java
pp uu bb ll ii cc LLiissttNNooddee
reverseListRecursive((LLiissttNNooddee
hheeaadd)) {{ iiff ((head == nn uu ll ll ||
hheeaadd..nneexxtt == nn uu ll ll )) {{
rreettuurrnn hheeaadd;;
}}
LLiissttNNooddee nneewwHHeeaadd =
reverseListRecursive((hheeaadd..nneexxtt));;
hh ee aa dd .. nn ee xx tt .. nn ee xx tt = hheeaadd;;
hheeaadd..nneexxtt = nn uu ll ll ;;
rreettuurrnn nneewwHHeeaadd;;
}}
jav
a
pp uu bb ll ii cc bboooolleeaann
hasCycle((LLiissttNNooddee hheeaadd))
{{ SSeett<<ListNode> vv ii ss ii tt ee dd =
nneeww HHaasshhSSeett<<>>(());;
LLiissttNNooddee cc uu rr rr = hheeaadd;;
java
pp uu bb ll ii cc bboooolleeaann
hasCycle((LLiissttNNooddee
hheeaadd)) {{ iiff ((hheeaadd ==
nnuullll)) rr ee tt uu rr nn ffaallssee;;
LLiissttNNooddee
ssllooww =
hheeaadd;;
LLiissttNNooddee
ff aa ss tt =
hheeaadd;;
iiff (( ss ll oo ww ==
ffaasstt)) {{
jav
a
pp uu bb ll ii cc LLiissttNNooddee
findMiddle((LLiissttNNooddee
hheeaadd)) {{ ii nn tt ll ee nn gg tt hh =
00 ;;
LLiissttNNooddee ccuurrrr = hheeaadd;;
// Count length
ww hhiillee ((ccuurrrr !
= nnuullll)) {{
ll ee nn gg tt hh + + ;;
ccuurrrr = ccuurrrr..nneexxtt;;
}}
// Find middle
ccuurrrr = hheeaadd;;
ff oo rr ((int i = 00 ;; ii <
ll ee nn gg tt hh / 2;; ii++))
{{ cc uu rr rr =
cc uu rr rr .. nn ee xx tt ;;
}}
rreettuurrnn cc uu rr rr ;;
Approach 2 - Two Pointer/Slow-Fast (Optimal):
java
pp uu bb ll ii cc LLiissttNNooddee
findMiddle((LLiissttNNooddee hheeaadd))
{{ LLiissttNNooddee ssllooww =
hheeaadd;;
LLiissttNNooddee ffaasstt = hheeaadd;;
jav
a
ccllaassss
AA rr rr aa yy SStt aa
c c kk {{
pp rr ii vv aa tt ee
iinntt[[]] aarrrr;;
pp rr ii vv aa tt ee
iinntt tt oo pp ;;
pprriivvaattee
iinntt
ccaappaacciittyy;;
ppuubblliicc
AArrrraayySSttaacck
k((iinntt ssiizzee)) {{
aa rr rr = nneeww
iinntt[[ssiizzee]];;
cc aa pp aa cc ii tt yy =
ssiizzee;;
ttoopp = -11 ;;
}}
ppuubblliicc
vv oo ii dd
push(
push (iinntt xx)) {{
iiff ((isFull
isFull(()))) {{
tthhrrooww nneeww RRuunnttiimmeeEExxcceeppttiioonn((""SSttaacckk
OO vv ee rr ff ll oo ww "" )) ;;
}}
aarrrr[[++
++ttoopp]] = xx;;
}}
pp uu bb ll ii cc
iinntt pop(
pop ())
{{ iiff
((isEmpty
isEmpty(()))
) {{
tthhrrooww nneeww RRuunnttiimmeeEExxcceeppttiioonn((""SSttaacckk
UU nn dd ee rr ff ll oo ww "" )) ;;
}}
rreettuurrnn aarrrr[[ttoopp---]];;
}}
pp uu bb ll ii cc
iinntt peek(
peek ())
{{ iiff
((isEmpty
isEmpty(())))
{{
tthhrrooww nneeww RRuunnttiimmeeEExxcceeppttiioonn((""SSttaacckk iiss ee mm pp tt yy "" )) ;;
}}
rreettuurrnn aa rr rr [[ tt oo pp ]] ;;
}}
pp uu bb ll ii cc
bboooolleeaann
isEmpty(
isEmpty ()) {{
rr ee tt uu rr nn ttoopp ==
-11 ;;
}}
pp uu bb ll ii cc
bboooolleeaann isFull(
isFull ())
{{ rreettuurrnn ttoopp
== ccaappaacciittyy -
11;;
}}
pp uu bb ll ii cc
iinntt size(
size ()) {{
rreettuurrnn
ttoopp + 11;;
}}
}}
// Time: O(1) for all operations, Space: O(n)
Approach 2 - Dynamic Array (Optimal):
java
ccllaassss
DDyynnaammiiccAA
rrrraayySSttaacckk
{{ pp rr ii vv aa tt ee
iinntt[[]] aarrrr;;
pp rr ii vv aa tt ee
iinntt tt oo pp ;;
pprriivvaattee
iinntt
ccaappaacciittyy;;
ppuubblliicc
DDyynnaammiiccAArrrr
aayySSttaacckk(()) {{
cc aa pp aa cc ii tt yy =
11 00 ;;
aa rrrr = nneeww iinntt[[ccaappaacciittyy]];;
ttoopp = -11 ;;
}}
ppuubblliicc vv oo ii dd push(
push (iinntt xx)) {{
iiff ((ttoo pp ==
ccaappaacciittyy -
11)) {{ resize(
resize ());;
}}
aarrrr[[++++ttoopp]] = xx;;
}}
pp rr ii vv aa tt ee
vv oo ii dd
resize(
resize ()) {{
cc aa pp aa cc ii tt
yy *= 22 ;;
aa rr rr = Arrays.
Arrays.copyOf(
copyOf (aarrrr,, cc aa pp aa cc ii tt yy )) ;;
}}
pp uu bb ll ii cc
iinntt pop(
pop ())
{{ iiff
((isEmpty
isEmpty(()))
) {{
tthhrrooww nneeww RRuunnttiimmeeEExxcceeppttiioonn((""SSttaacckk
UU nn dd ee rr ff ll oo ww "" )) ;;
}}
rreettuurrnn aarrrr[[ttoopp---]];;
}}
pp uu bb ll ii cc
iinntt peek(
peek ())
{{ iiff
((isEmpty
isEmpty(())))
{{
tthhrrooww nneeww RRuunnttiimmeeEExxcceeppttiioonn((""SSttaacckk iiss ee mm pp tt yy "" )) ;;
}}
rreettuurrnn aa rr rr [[ tt oo pp ]] ;;
}}
pp uu bb ll ii cc
bboooolleeaann
isEmpty(
isEmpty ()) {{
rr ee tt uu rr nn ttoopp ==
-11 ;;
}}
pp uu bb ll ii cc
iinntt size(
size ()) {{
rreettuurrnn
ttoopp + 11;;
}}
}}
// Time: O(1) amortized, Space: O(n)
java
ccllaassss
LLiinnkkeeddLLiis
sttSSttaacckk {{
pprriivvaattee
ccllaassss
NNooddee {{
ii nn tt
dd aa tt aa
;;
NNoodde
e
nneexxtt;
;
NNooddee((iinntt
dd aa tt aa )) {{
tthhiiss..ddaattaa
= ddaattaa;;
}}
}}
pprriivvaattee
NNooddee
ttoopp;;
pp rr ii vv aa tt ee
iinntt ssiizzee;;
ppuubblliicc
LLiinnkkeeddLLiissttS
Sttaacckk(()) {{
ttoopp = nn uu ll ll ;;
ssiizzee = 00;;
}}
ppuubblliicc vv oo ii dd push(
push (iinntt xx)) {{
NNooddee nneewwNNooddee =
nneeww NNooddee((xx));;
nneewwNNooddee..nneexxtt =
tt oo pp ;;
ttoopp =
nneewwNNoodd
ee;; ss ii zz ee +
+ ;;
}}
pp uu bb ll ii cc
iinntt pop(
pop ())
{{ iiff
((isEmpty
isEmpty(()))
{
) {
tthhrrooww nneeww RRuunnttiimmeeEExxcceeppttiioonn((""SSttaacckk
UU nn dd ee rr ff ll oo ww "" )) ;;
}}
iinntt ddaattaa
=
ttoopp..ddaattaa
;; ttoopp =
tt oo pp .. nn ee xx t
t ;; ss ii zz ee - -;;
rreettuurrnn dd aa tt aa ;;
}}
pp uu bb ll ii cc
iinntt peek(
peek ())
{{ iiff
((isEmpty
isEmpty(())))
{{
tthhrrooww nneeww RRuunnttiimmeeEExxcceeppttiioonn((""SSttaacckk iiss ee mm pp tt yy "" )) ;;
}}
rreettuurrnn tt oo pp .. dd aa tt aa ;;
}}
pp uu bb ll ii cc
bboooolleeaann
isEmpty(
isEmpty ()) {{
rr ee tt uu rr nn ttoopp ==
nnuullll;;
}}
pp uu bb ll ii cc
iinntt size(())
{{ rr ee tt uu rr
nn ss ii zz ee ;;
}}
}}
// Time: O(1) for all operations, Space: O(n)
java
cc ll aa ss ss
AArrrraayyQQuue
euuee {{
pp rr ii vv aa tt ee
iinntt[[]] aarrrr;;
pp rr ii vv aa tt ee
iinntt ffrroonntt;;
pp rr ii vv aa tt ee
iinntt rreeaarr;;
pp rr ii vv aa tt ee
iinntt ssiizzee;;
pprriivvaattee
iinntt
ccaappaacciittyy;;
ppuubblliicc
AArrrraayyQQuueeuuee((iinntt
ccaappaacciittyy)) {{
tthhiiss..ccaappaacciittyy =
ccaappaacciittyy;;
aarrrr = nneeww
iinntt[[ccaappaacciittyy]
];; ff rr oo nn tt = 00 ;;
rr ee aa rr = -11;;
ssiizzee = 00;;
}}
pp uu bb ll ii cc vv oo ii dd
enqueue(
enqueue (iinntt xx))
{{ iiff ((isFull
isFull(()))) {{
tthhrrooww nneeww RRuunnttiimmeeEExxcceeppttiioonn((""QQuueeuuee
OO vv ee rr ff ll oo ww "" )) ;;
}}
rreeaarr = ((rreeaarr +
1 1 )) %
ccaappaacciittyy;;
aa rr rr [[ rr ee aa rr ]] =
xx;;
ss ii zz ee ++;
++ ;
}}
pp uu bb ll ii cc iinntt
dequeue(
dequeue ()) {{ iiff
((isEmpty
isEmpty(()))) {{
tthhrrooww nneeww RRuunnttiimmeeEExxcceeppttiioonn((""QQuueeuuee
UU nn dd ee rr ff ll oo ww "" )) ;;
}}
iinntt ddaattaa = aarrrr[[ffrroonntt]];;
ffrroonntt = ((ffrroonntt +
11)) % ccaappaacciittyy;;
ss ii zz ee - -;;
rreettuurrnn dd aa tt aa ;;
}}
pp uu bb ll ii cc
iinntt peek(
peek ())
{{ iiff
((isEmpty
isEmpty(())))
{{
tthhrrooww nneeww RRuunnttiimmeeEExxcceeppttiioonn((""QQuueeuuee iiss
ee mm pp tt yy "" )) ;;
}}
rreettuurrnn aa rr rr [[ ff rr oo nn tt ]] ;;
}}
pp uu bb ll ii cc
bboooolleeaann
isEmpty(
isEmpty ()) {{
rr ee tt uu rr nn ss ii zz ee
== 00 ;;
}}
pp uu bb ll ii cc bboooolleeaann isFull(
isFull ()) {{
rreettuurrnn ssiizzee == ccaappaacciittyy;;
}}
pp uu bb ll ii cc
iinntt size(())
{{ rr ee tt uu rr
nn ss ii zz ee ;;
}}
}}
// Time: O(1) for all operations, Space: O(n)
Approach 2 - Circular Queue (Optimal):
java
ccllaassss
CCiirrccuullaarr
QQuueeuuee
{{ pp rr ii vv aa tt
ee iinntt[[]]
aarrrr;;
pprriivvaattee iinntt ffrroonntt,, rreeaarr,, ssiizzee,, ccaappaacciittyy;;
ppuubblliicc
CCiirrccuullaarrQQuuee
uuee((iinntt kk)) {{
cc aa pp aa cc ii tt yy =
kk ;;
aarrrr =
nneeww
iinntt[[kk]];;
ff rr oo nn tt = -
11 ;;
rr ee aa rr = -11;;
ssiizzee = 00;;
}}
pp uu bb ll ii cc bboooolleeaann
enqueue(
enqueue (iinntt vv aa ll uu ee ))
{{ iiff ((isFull
isFull(())))
rr ee tt uu rr nn ff aa ll ss ee ;;
iiff ((isEmpty
isEmpty(())))
{{ ff rr oo nn tt
= 00 ;;
}}
rreeaarr = ((rreeaarr +
1 1 )) %
ccaappaacciittyy;;
aarrrr[[rreeaarr]] =
vv aa ll uu ee ;;
ss ii zz ee +
+ ;;
rreettuurr
nn
ttrruuee;;
}}
pp uu bb ll ii cc
bboooolleeaann
dequeue(
dequeue ()) {{ iiff
((isEmpty
isEmpty(())))
rr ee tt uu rr nn
ffaallssee;;
iiff ((ffrroonntt
== rreeaarr))
{{ ff rr oo nn tt
= -11 ;;
rr ee aa rr = -11;;
}} eellssee {{
ffrroonntt = ((ffrroonntt + 11)) % ccaappaacciittyy;;
}}
ss ii zz ee -
-;;
rreettuurr
nn
ttrruuee;;
}}
pp uu bb ll ii cc iinntt front(
front ()) {{
rr ee tt uu rr nn isEmpty()
isEmpty() ? -11 : aa rr rr [[ ff rr oo nn tt ]] ;;
}}
pp uu bb ll ii cc iinntt rear(
rear ()) {{
rr ee tt uu rr nn isEmpty()
isEmpty() ? -11 : aa rr rr [[ rr ee aa rr ]] ;;
}}
pp uu bb ll ii cc bboooolleeaann isEmpty(
isEmpty ()) {{
rreettuurrnn ssiizzee == 00;;
}}
pp uu bb ll ii cc
bboooolleeaann isFull(())
{{ rreettuurrnn ssiizzee
== ccaappaacciittyy;;
}}
}}
// Time: O(1) for all operations, Space: O(n)
java
ccllaassss
LLiinnkkeeddLLiis
sttQQuueeuuee
{{ pprriivvaattee
ccllaassss
NNooddee {{
ii nn tt
dd aa tt aa
;;
NNoodde
e
nneexxtt;
;
NNooddee((iinntt
dd aa tt aa )) {{
tthhiiss..ddaattaa
= ddaattaa;;
}}
}}
pprriivvaattee NNooddee
ffrroonntt,, rreeaarr;;
pp rr ii vv aa tt ee iinntt
ssiizzee;;
ppuubblliicc
LLiinnkkeeddLLiissttQQ
uueeuuee(()) {{
ff rr oo nn tt = nnuullll;;
rreeaarr = nnuullll;;
ssiizzee = 00;;
}}
pp uu bb ll ii cc vv oo ii dd enqueue(
enqueue (iinntt xx)) {{
NNooddee nneewwNNooddee = nneeww NN oo dd ee (( xx )) ;;
pp uu bb ll ii cc iinntt
dequeue(
dequeue ()) {{ iiff
((isEmpty
isEmpty(()))) {{
tthhrrooww nneeww RRuunnttiimmeeEExxcceeppttiioonn((""QQuueeuuee
UU nn dd ee rr ff ll oo ww "" )) ;;
}}
iinntt ddaattaa =
ffrroonntt..ddaattaa;;
ff rr oo nn tt =
ffrroo nntt.. nneexxtt;;
iiff ((ffrroonntt
== nnuullll))
{{ rr ee aa rr
= nn uu ll ll ;;
}}
ss ii zz ee - -;
;
rreettuurr
nn
ddaattaa;;
}}
pp uu bb ll ii cc
iinntt peek(())
{{ iiff
((isEmpty(()))
) {{
tthhrrooww nneeww RRuunnttiimmeeEExxcceeppttiioonn((""QQuueeuuee iiss
ee mm pp tt yy "" )) ;;
}}
rreettuurrnn ff rr oo nn tt .. dd aa tt aa ;;
}}
pp uu bb ll ii cc
bboooolleeaann
isEmpty(()) {{
rr ee tt uu rr nn
ff rr oo nn tt ==
nnuullll;;
}}
java
pp uu bb ll ii cc LLiisstt<Integer>>
removeDuplicates((LLiisstt<<IInntteeggeerr>>
lliisstt)) {{ SSeett<<Integer> ss ee tt = nneeww
HH aa ss hh SS ee tt << >> (( ll ii ss tt )) ;;
rreettuurrnn nneeww AArrrraayyLLiisstt<<>>((sseett));;
}}
// Time: O(n), Space: O(n)
// Note: Order is not preserved with HashSet
java
pp uu bb ll ii cc LLiisstt<Integer>>
removeDuplicatesOrdered((LLiisstt<<IInntteeggeerr>>
lliisstt)) {{ SSeett<<Integer> sseett = nneeww
LL ii nn kk ee dd HH aa ss hh SS ee tt << >> (( ll ii ss tt )) ;;
rreettuurrnn nneeww AArrrraayyLLiisstt<<>>((sseett));;
}}
// Time: O(n), Space: O(n)
// Order is preserved
Approach 3 - Stream API:
java
pp uu bb ll ii cc LLiisstt<Integer>>
removeDuplicatesStream((LLiisstt<<IInntteeggeerr>>
lliisstt)) {{ rr ee tt uu rr nn lliisstt..stream(())
..distinct(())
.. collect((CC oo lllleecc ttoo rrss.. toList(())));;
}}
// Time: O(n), Space: O(n)
java
pp uu bb ll ii cc LLiisstt<Integer>>
sortSet((SSeett<<IInntteeggeerr>>
sseett)) {{ LLiisstt<<Integer> lliisstt =
nneeww
AA rr rr aa yy LL ii ss tt << >> (( ss ee tt )) ;;
CCoolllleeccttiioonnss..sort((lliisstt));;
rreettuurrnn lliisstt;;
}}
java
pp uu bb ll ii cc SSeett<Integer>>
sortedSet((SSeett<<IInntteeggeerr>>
sseett)) {{ rreettuurrnn nneeww
TTrreeeeSSeett<<>>((sseett));;
}}
// Time: O(n log n), Space: O(n)
Approach 3 - Stream API:
jav
a
pp uu bb ll ii cc LLiisstt<Integer>>
sortSetStream((SSeett<<IInntteeggeerr>>
sseett)) {{ rr ee tt uu rr nn sseett..stream(())
..sorted(())
.. collect((CC oo lllleecc ttoo rrss.. toList(())));;
}}
java
pp uu bb ll ii cc MMaapp<Character,, IInntteeggeerr>>
charFrequency((SSttrriinngg ss)) {{
MMaapp<<Character, IInntteeggeerr>>
ffrreeqqMMaapp = nneeww
HHaasshhMMaapp<<>>(());;
ff oo rr ((char c : ss..toCharArray(()))) {{
ffrreeqqMMaapp..put(cc,, ffrreeqqMMaapp..getOrDefault((c, 00 )) + 11));;
}}
rreettuurrnn ffrreeqqMMaapp;;
}}
jav
a
pp uu bb ll ii cc MM aa pp <Stt rr ii nn gg ,, IInntteeggeerr>>
wordFrequency((SSttrriinngg tteexxtt)) {{
MM aa pp << String,, IInntteeggeerr>>
ffrreeqqMMaapp = nneeww
HHaasshhMMaapp<<>>(());; SStt rr ii nn gg []
wwoorrddss = tteexxtt..split((""\\\\ss++""));;
java
pp uu bb ll ii cc MMaapp<Character,, LLoonngg>>
charFrequencyStream((SSttrriinngg ss)) {{
rr ee tt uu rr nn ss..chars(())
..mapToObj(cc -> (( cc hh aa rr )) cc))
..collect((CCoolllleeccttoorrss..gr
oupingBy(( FFuunncc ttiioo nn..
identity(()),,
CCoolllleeccttoorrss..counting
(( ))
)))); ;
}}
pp uu bb ll ii cc MM aa pp <Stt rr ii nn gg ,, LLoonngg>>
wordFrequencyStream((SSttrriinngg tteexxtt)) {{
rr ee tt uu rr nn
AArrrraayyss.stream((tteexxtt..split((""\\\\ss++""))))
..collect((CCoolllleeccttoorrss..gr
oupingBy(( FFuunncc ttiioo nn..
identity(()),,
CCoolllleeccttoorrss..counting
(( ))
jav
a
pp uu bb ll ii cc ii nn tt
lengthOfLongestSubstring((SSttrriinngg ss))
{{ ii nn tt mmaaxxLLeenn = 00 ;;
java
pp uu bb ll ii cc ii nn tt
lengthOfLongestSubstring((SSttrriinngg ss))
{{ SSeett<<Character> ss ee tt =
nneeww HHaasshhSSeett<<>>(());;
iinntt mmaaxxLLeenn = 00;;
iinntt lleefftt = 00;;
jav
a
pp uu bb ll ii cc ii nn tt
lengthOfLongestSubstring((SSttrriinngg ss)) {{
MMaapp<<Character, IInntteeggeerr>>
mmaapp = nneeww
HHaasshhMMaapp<<>>(());; ii nn tt
mmaaxxLLeenn = 00 ;;
iinntt lleefftt = 00;;
iiff ((map.containsKey((cc)))) {{
ll ee ff tt = Math.max((lleefftt,, mm aa pp .. get(cc )) + 11 )) ;;
}}
mmaapp..put((cc,, rr ii gg hh tt )) ;;
mmaaxxLLeenn = Math.max((mmaaxxLLeenn,, rr ii gg hh tt - lleefftt + 11));;
}}
rreettuurrnn mmaaxxLLeenn;;
}}
java
pp uu bb ll ii cc LLiisstt<Integer>>
flatten((LLiisstt<<LLiisstt<<Integer>>>>
nn ee ss tt ee dd LL ii ss tt )) {{ LLiisstt<<Integer>
rreessuulltt = nneeww AA rr rr aa yy LL ii ss tt << >> (( )) ;;
ffoorr ((List<IInntteeggeerr>>
iinnnneerrLLiisstt :
nneesstteeddLLiisstt)) {{ ffoorr
(( II nn tt ee gg ee rr nnuumm :
iinnnneerrLLiisstt)) {{
rreessuulltt..add((nnuumm));;
}}
}}
jav
a
pp uu bb ll ii cc LLiisstt<Integer>>
flattenStream((LLiisstt<<List<IInntteeggeerr>>>>
nn ee ss tt ee dd LL ii ss tt )) {{ rr ee tt uu rr nn
nneesstteeddLLiisstt..stream(())
..flatMap((LLiisstt::stream))
.. collect((CC oo lllleecc ttoo rrss.. toList(())));;
}}
java
jav
a
// FlatMap: transforms each element to a stream, then flattens
pp uu bb ll ii cc LLiisstt<Character>>
flatMapExample((LLiisstt<<SSttrriinngg>>
ss tt rr ii nn gg ss )) {{ rr ee tt uu rr nn
ssttrriinnggss..stream(())
..flatMap(s -> ss.chars().mapToObj((cc -> (( cc hh aa rr )) cc))))
.. collect((CC oo lllleecc ttoo rrss.. toList(())));;
}}
Complete Comparison:
jav
a
ccllaassss MMaappVVssFFllaattMMaappDDeemmoo {{
ssttaattiicc ccllaassss
EEmmppllooyyeeee
{{ SS tt rr ii nn gg
nnaammee;;
pp uu bb ll ii cc SString
tring getName(
getName ()) {{ rr ee tt uu rr nn nnaammee;; }}
}}
jav
a
ccllaassss PPeerrssoonn {{
pprriivvaattee
SSttrriinngg
nnaammee;;
pp rr ii vv aa tt ee
iinntt aa gg ee ;;
pp uu bb ll ii cc PPerson
erson((SSttrriinngg
nnaammee,, iinntt aaggee)) {{
tt hh ii ss .. nn aa mm ee =
nnaammee;;
tthhiiss..aaggee = aa ggee;;
}}
@@OOvveerrrriiddee
ppuubblliicc bboooolleeaann
equals(
equals (OObbjjeecctt oo))
{{ iiff ((tthhiiss == oo ))
rr ee tt uu rr nn ttrruuee;;
iiff ((o
o == nn uu ll ll || getClass(
getClass ()) != o.getClass
o.getClass(())))
rr ee tt uu rr nn ff aa ll ss ee ;; PPeerrssoonn
ppeerrssoonn = (( PPee rr ss oo nn )) oo ;;
rr ee tt uu rr nn aaggee ==
ppeerrssoonn..aaggee &&
OObbjjeeccttss..equalsequals((nnaammee,,
ppeerrssoonn..nnaammee));;
}}
@@OOvveerrrriiddee
pp uu bb ll ii cc ii nn tt hashCode(
hashCode ()) {{
rreettuurrnn OObbjjeeccttss..hash hash((nnaammee,, aaggee));;
}}
// Getters
pp uu bb ll ii cc SString
tring getName(
getName ()) {{
rr ee tt uu rr nn nnaammee;; }}
pp uu bb ll ii cc iinntt getAge(
getAge ()) {{
rr ee tt uu rr nn aa gg ee ;; }}
}}
pp uu bb ll ii cc SS ee tt<
< Pee rr ss oo nn >>
removeDuplicateP
removeDuplicatePersons(
ersons (LLiisstt<<P Peerrssoonn>>
pp ee rr ss oo nn ss )) {{ rr ee tt uu rr nn nneeww
HHaasshhSSeett<<>>((ppeerrssoonnss));;
}}
// Time: O(n), Space: O(n)
jav
a
pp uu bb ll ii cc LLiisstt<Peerrssoo nn>>
removeDuplicatesStream((LLiisstt<<Peerrssoonn>>
pp ee rr ss oo nn ss )) {{ rr ee tt uu rr nn
ppeerrssoonnss..stream(())
.. collect((CC oo lllleecc ttoo rrss.. toMap((
pp -> p.getName(()) + ""--"" + pp..getAge(()),,
FF uu nn cc tt ii oo nn .. identity(( )) ,,
((eexxiissttiinngg,, rreeppllaacceemmeenntt)) -> eexxiissttiinngg
))))
..values(())
..stream(())
.. collect((CC oo lllleecc ttoo rrss.. toList(())));;
}}
// Time: O(n), Space: O(n)
jav
a
pp uu bb ll ii cc vv oo ii dd executorServiceExample(()) {{
EE xx ee cc uu tt oo rr SS ee rr vv ii cc ee eexxeeccuuttoorr = Executors..newFixedThreadPool((33));;
ff oo rr ((int i = 11 ;; ii <=
55 ;; ii++)) {{ ff ii nn aa ll
ii nn tt tt aa ss kk II dd =
ii;;
eexxeeccuuttoorr..sub
mit(((()) -> {{
SSyysstteemm.out..println((""TTaasskk "" + tt aa ss kk II dd +
"" eexxeeccuutteedd by " +
TThhrreeaadd..currentThread(())..getName(())));;
tt rr yy {{
TT hh rr ee aa dd .. sleep(( 11 00 00 00 )) ;;
}} ccaattcchh
((IInntteerrrruupptteeddEEx
xcceeppttiioonn ee)) {{
ee .. printStackTrace(( )) ;;
}}
} } )); ;
}}
eexxeeccuuttoorr..sh
utdown(());; tt rr yy
{{
eexxeeccuuttoorr..awaitTermination((1100,, TTiimmeeUUnniitt..SSEECCOONNDDSS));;
}} ccaattcchh
Approach 2 - Callable with Future (Optimal):
jav
a
pp uu bb ll ii cc vv oo ii dd executorServiceWithReturn(())
tthhrroowwss EExxcceeppttiioonn {{
EE xx ee cc uu tt oo rr SS ee rr vv ii cc ee eexxeeccuuttoorr
= Executors..newFixedThreadPool((33));;
LLiisstt<<Future<IInntteeggeerr>>>>
ff uu tt uu rr ee ss = nneeww
AA rr rr aa yy LL ii ss tt << >> (( )) ;;
// Submit tasks
ff oo rr ((int i = 11 ;; ii
<= 55 ;; ii++)) {{
ff ii nn aa ll ii nn tt
nnuumm = ii;;
CCaallllaabbllee<<IInntteeggeerr>> ttaasskk = (()) -> {{
TThhrreeaadd..sle
ep((11000000));;
rr ee tt uu rr nn
nnuum m *
nnuum m ; ;
}};;
ffuuttuurreess..add(eexxeeccuuttoorr..submit((ttaasskk))));;
}}
// Get results
Approach 3 - CompletableFuture:
jav
a
pp uu bb ll ii cc vv oo ii dd completableFutureExample(
completableFutureExample ()) {{
LLiisstt<<CompletableFuture
CompletableFuture< <IInntteeggeerr>>>> ff uu tt uu rr ee ss = nneeww
AArrrraayyLLiisstt<<>>(());;
ff oo rr ((intint i = 11 ;; ii <=
55 ;; ii++++)) {{ ff ii nn aa ll
ii nn tt nnuumm = ii;;
CCoommpplleettaabblleeFFuuttuurree<<Integer
Integer>
> ffuuttuurree =
CCoommpplleettaabblleeFFuuttuurree..supplyAsync
supplyAsync(((()) -> {{
tt rr yy {{
TThhrreeaadd..sleep
sleep((11000000));;
}} ccaattcchh
((IInntteerrrruupptteeddEExxcceeppttiio
onn ee)) {{ ee..print
printS
StackT
tackTrace(
race ());;
}}
rreettuurrnn nnuumm * nnuumm;;
} } )); ;
ffuuttuurreess..addadd((ffuuttuurree));;
}}
ffuuttuurreess..for
for
Each(
Each (ff -> {{
tt rr yy {{
SSyysstteemm.out.out..println
println((""RReessuulltt:: "" + f..get
get(())));;
}} ccaattcchh
((EExxcceeppttiioonn
ee)) {{
ee..print
printS
StackT
tackTrace(
race ()
); ;
}}
} } )); ;
}}
jav
a
ccllaassss EEaarrllyySSiinngglleettoonn {{
pp rr ii vv aa tt ee ss tt aa tt ii cc final EarlySingleton IINNSSTTAANNCCEE = nneeww
EE aa rr ll yy SS ii nn gg ll ee tt oo nn (( )) ;;
pprriivvaattee EEaarrllyySSiinngglleettoonn(()) {{
// Private constructor
}}
pp uu bb ll ii cc ssttaattiicc
EE aa rr ll yy SS ii nn gg ll ee tt oo nn
getInstance(()) {{ rr ee tt uu rr nn
IINNSSTTAANNCCEE;;
}}
}}
// Thread-safe, but creates instance even if not needed
Approach 2 - Lazy with Synchronized (Normal Method):
java
ccllaassss LLaazzyySSiinngglleettoonn {{
pprriivvaattee ssttaattiicc LLaazzyySSiinngglleettoonn iinnssttaannccee;;
pprriivvaattee
LLaazzyySSiinngglleettoo
nn( ( ) ) { {
// Private constructor
}}
pp uu bb ll ii cc ssttaattiicc
ssyynncchhrroonniizzeedd
LL aa zz yy SS ii nn gg ll ee tt oo nn getInstance(()) {{
iiff (( ii nn ss tt aa nn cc ee == nnuullll)) {{
iinnssttaannccee = nneeww LLaazzyySSiinngglleettoonn(());;
}}
rreettuurrnn ii nn ss tt aa nn cc ee ;;
}}
}}
jav
a
ccllaassss DDoouubblleeCChheecckkeeddSSiinngglleettoonn {{
pprriivvaattee ssttaattiicc vvoollaattiillee DDoouubblleeCChheecckkeeddSSiinngglleettoonn
iinnssttaannccee;;
pprriivvaattee DDoouubblleeCChheecckkeeddSSiinngglleettoonn(()) {{
// Private constructor
}}
pp uu bb ll ii cc ss tt aa tt ii cc
DDoouubblleeCChheecckkeeddSSiinngglleet
toonn getInstance(()) {{ iiff
(( ii nn ss tt aa nn cc ee == nn uu ll ll )) {{
ssyynncchhrroonniizzeedd
((DDoouubblleeCChheecckkeeddSSiinn
gglleettoonn..ccllaassss)) {{ iiff
(( ii nn ss tt aa nn cc ee == nn uu ll ll )) {{
iinnssttaannccee = nneeww DDoouubblleeCChheecckkeeddSSiinngglleettoonn(());;
}}
}}
}}
rreettuurrnn ii nn ss tt aa nn cc ee ;;
}}
java
ccllaassss
BBiillllPP uugghhSSiinngg
lleettoo nn {{
pprriivvaattee
BBiillllPPuugghhSSiinnggll
eettoonn(()) {{
// Private constructor
}}
pp uu bb ll ii cc ssttaattiicc
BB ii ll ll PP uu gg hh SS ii nn gg ll ee tt oo nn
Approach 5 - Enum (Most Optimal):
jav
a
eennuumm
EEnnuummSSiinn
gglleettoonn {{
IINNSSTTAANNCC
EE;;
pp uu bb ll ii cc vv oo ii dd doSomething(()) {{
// Business logic
}}
}}
java
// Checked Exception - must be declared in method signature
ccllaassss
IInnssuuffffiicciieennttFFuunnddssEExxcceepptt
iioonn eexxtteennddss EExxcceeppttiioonn {{
pp rr ii vv aa tt ee ddoouubbllee aammoouunntt;;
ppuubblliicc
IInnssuuffffiicciieennttFFuunnddssEExxcceep
pttiioonn((ddoouubbllee aammoouunntt)) {{
ssuuppeerr((""IInnssuuffffiicciieenntt
ff uu nn dd ss :: "" + aammoouunntt));;
tthhiiss..aammoouunntt = aammoouunntt;;
}}
ppuubblliicc
IInnssuuffffiicciieennttFFuunnddssEExxcceeppttiioonn(Sttrrii
nngg mmeessssaaggee,, ddoouubbllee aammoouunntt)) {{
ssuuppeerr((mmeessssaaggee));;
tthhiiss..aammoouunntt = aammoouunntt;;
}}
pp uu bb ll ii cc
ddoouubbllee
getAmount(
getAmount ()) {{
rr ee tt uu rr nn
aammoouunntt;;
}}
}}
// Usage:
cc ll aa ss ss
BBaannkkAAccccoou
unntt {{
pprriivvaattee
ddoouubbllee
bbaallaannccee;;
jav
a
// Unchecked Exception - extends RuntimeException
ccllaassss
IInnvvaalliiddAAggeeEExxcceeppttiioonn
eexxtteennddss
RRuunnttiimmeeEExxcceeppttiioonn {{
pp rr ii vv aa tt ee iinntt aa gg ee ;;
ppuubblliicc
IInnvvaalliiddAAggeeEExxcceep
pttiioonn((iinntt aaggee)) {{
ssuuppeerr((""IInnvvaalliidd
aa ggee:: "" + aaggee));;
tt hh ii ss .. aa gg ee = aa gg ee ;;
}}
ppuubblliicc
IInnvvaalliiddAAggeeEExxcceeppttiioonn((Sttr
riinngg mmeessssaaggee,, iinntt aaggee)) {{
ssuuppeerr((mmeessssaaggee));;
tthhiiss..aaggee = aa ggee;;
}}
ppuubblliicc
IInnvvaalliiddAAggeeEExxcceeppttiioonn((Sttrriinngg
mmeessssaaggee,, TThhrroowwaabbllee ccaauussee,, iinntt
aaggee)) {{ ssuuppeerr((mmeessssaaggee,,
cc aa uu ss ee )) ;;
tthhiiss..aaggee = aa ggee;;
}}
pp uu bb ll ii cc
iinntt getAge(
getAge ())
{{ rr ee tt uu rr nn
aa gg ee ;;
}}
}}
// Usage:
cc ll aa ss ss
PPeerrssoon
n {{
pprriivvaatte
e iinntt
aaggee;;
pp uu bb ll ii cc vv oo ii dd
setAge(
setAge (iinntt aaggee))
{{ iiff ((age
age < 00 ||
aaggee > 115500))
{{
tthhrrooww nneeww IInnvvaalliiddAAggeeEExxcceeppttiioonn((aaggee));;
}}
tthhiiss..aaggee = aa ggee;;
}}
}}
jav
a
// Base class
aa bb ss tt rr aa cc tt
ccllaassss
AAnniimmaall {{
pprrootteecctteedd
SSttrriinngg
nnaammee;;
ppuubblliicc
AAnniimmaall((SSttrriin
ngg nnaammee)) {{
tt hh ii ss .. nn aa mm ee =
nnaammee;;
}}
// Derived classes
cc ll aa ss ss DDoogg
eexxtteennddss
AAnniimmaall {{
ppuubblliicc
DDoogg((SSttrriinngg
nnaammee)) {{
ssuuppeerr((nnaammee));;
}}
@@OOvveerrrriiddee
pp uu bb ll ii cc vv oo ii dd makeSound(
makeSound ()) {{
SSyysstteemm.out. .out .println(
println (nnaammee + "" ssaayyss:: WWoo oo ff !! "" )) ;;
}}
@@OOvveerrrriiddee
pp uu bb ll ii cc vv oo ii dd sleep(
sleep ()) {{
SSyysstteemm.out. .out .println(
println (nnaammee + "" iiss sleeping ii nn tthhee ddoogghhoouussee""));;
}}
}}
cc ll aa ss ss CCaatt
eexxtteennddss
AAnniimmaall {{
ppuubblliicc
CCaatt((SSttrriinngg
nnaammee)) {{
ssuuppeerr((nnaammee));;
}}
@@OOvveerrrriiddee
pp uu bb ll ii cc vv oo ii dd makeSound(
makeSound ()) {{
SSyysstteemm.out. .out .println(
println (nnaammee + "" ssaayyss:: MMeeooww!!""));;
}}
}}
@@OOvveerrrriiddee
pp uu bb ll ii cc vv oo ii dd makeSound(
makeSound ()) {{
SSyysstteemm.out .out..println
println((nnaammee + "" ssaayyss:: TTww ee ee tt !! "" )) ;;
}}
ppuubblliicc vv oo ii dd fly(
fly ()) {{
SSyysstteemm.out
.out..println
println((nnaammee + "" iiss ffllyyiinngg""));;
}}
}}
// Demonstration
pp uu bb ll ii cc cc ll aa ss ss
PPoollyymmoorrpphhiissmmDDee
mmoo {{ pp uu bb ll ii cc
ssttaattiicc void
main(
main (SSttrriinngg[[]] aa rr gg ss ))
{{
// Runtime polymorphism
AAnniimmaall aanniimmaall11 =
nneeww
DDoogg((""BBuuddddyy""));;
AAnniimmaall aanniimmaall22 =
nneeww
CCaatt((""WWhhiisskkeerrss""));;
AAnniimmaall aanniimmaall33 =
nneeww
BBiirrdd((""TTwweeeettyy""));;
// Array of animals
AAnniimmaall[[]]
aanniimmaallss
= {{ nneeww
DDoogg((""MM
aaxx"")),,
nneeww
CCaatt((""LLu
unna a " " ) ) , ,
nneeww
BBiirrdd((""PP
oollllyy""))
}};;
ffoorr ((AAnniimmaall
aanniimmaall :
aanniimmaallss)) {{
aa nniimm aa ll..makeSo
makeSo
und( )
und ( ) ;;
aa nn ii mm aa ll ..sleep
sleep(( )
) ;;
}}
// Downcasting when
needed iiff
((aanniimmaall33
iinnssttaanncceeooff
BBiirrdd)) {{ BBiirrdd
bbiirrdd = ((BBiirrdd))
aa nn ii mm aa ll 33 ;;
bb ii rr dd ..fly
fly(( )) ;;
}}
}
} }
}
java
cc ll aa ss ss
EEmmppllooyyee
ee {{
pprriivvaattee
SSttrriinngg
nnaammee;;
pprriivvaattee SSttrriinngg
ddeeppaarrttmmeenntt;;
pp rr ii vv aa tt ee
ddoouubbllee
ssaallaarryy;;
pprriivvaattee
SSttrriinngg
llooccaattiioonn;;
ppuubblliicc EEmmppllooyyeeee((Sttrriinngg
nnaammee,, SSttrriinngg
ddeeppaarrttmmeenntt,, ddoouubbllee
ssaallaarryy,, SSttrriinngg
llooccaattiioonn)) {{
tt hh ii ss .. nn aa mm ee =
nnaammee;;
tthhiiss..ddeeppaarrttmmee
nntt =
ddeeppaarrttmmeenntt;;
tthhiiss..ssaallaarryy =
ssaallaarryy;;
tthhiiss..llooccaattiioonn =
llooccaattiioonn;;
}}
// Getters
pp uu bb ll ii cc SString
tring getName(
getName ()) {{ rr ee tt uu rr nn nnaammee;; }}
pp uu bb ll ii cc SString
tring getDepartment(
getDepartment ()) {{
rr ee tt uu rr nn ddeeppaarrttmmeenntt;; }}
pp uu bb ll ii cc ddoouubbllee getSalary(
getSalary ()) {{
rr ee tt uu rr nn ss aa ll aa rr yy ;; }}
pp uu bb ll ii cc SString
tring getLocation(
getLocation ()) {{ rr ee tt uu rr nn ll oo cc aa tt ii oo nn ;; }}
}}
ccllaassss NNeesstteeddEEmmppllooyyeeeeOOppeerraattiioonnss {{
jav
a
ccllaassss EEmmppllooyyeeeeOOppeerraattiioonnss {{
sq
l
-- For 2nd highest salary (N=2)
SSEELLEECCTT
DDIISSTTIINNCCTT
ssaallaarryy
FFRROOMM
EEmmppllooyyeeee
OORRDDEERR BBYY
ssaa llaa rryy
DDEESSCC
LLIIMMIITT 11
OOFFFFSSEETT 11 ;;
sql
sq
l
-- For Nth highest salary
SSEELLEEC
CTT
ssaallaarry
y
FFRROOMM
((
SSEELLEECCTT ssaa llaa rryy, DENSE_RANK(()) OOVVEERR
((OORRDDEERR BBY ss aa ll aa rr yy DDEESSCC)) aa ss rraannkk
FFRROOMM EEmmppllooyyeeee
)) rraannkkeedd
WWHHEERREE rraannkk = NN;;
sq
l
-- Sample Tables
CCRREEAATTEE
TTAABBLLEE
EEmmppllooyyeeee ((
eemmpp iidd IINNTT
PPRRIIMMAARRYY
KKEEYY,,
eemmpp nnaammee VVAARRCCHHAARR((110000)),,
ddeepptt iidd
IINNTT,,
ssaallaarryy DDEECCIIMMAALL((1100,,22))
)); ;
CCRREEAATTEE
TTAABBLLEE
DDeeppaarrttmmeennt
t (( ddeepptt iidd
IINNTT
PPRRIIMMAARRYY
KK EE YY ,, ddeepptt
nnaammee
V V A A R R C C H H A A R R ((1 1
0 0 0 0 )), ,
ll oo cc aa tt ii oo nn
V V A A R R C C H H A A R R ((1 1
0 0 0 0 ))
)); ;
-- LEFT JOIN: Returns all records from left table, matching from right
SSEELLEECCTT ee.emp .emp_name
name,, ee..ssaallaarryy,,
dd .. dd ee pp tt nnaammee,, dd..llooccaattiioonn
FFRROOMM EEmmppllooyyeeee ee
LLEEFFTT JJOOIINN Department d OONN ee .. dd ee pp tt ii dd = dd .. dd ee pp tt iidd;;
-- RIGHT JOIN: Returns all records from right table, matching from left
SSEELLEECCTT ee.emp .emp_name
name,, ee..ssaallaarryy,,
dd .. dd ee pp tt nnaammee,, dd..llooccaattiioonn
FFRROOMM EEmmppllooyyeeee ee
RRIIGGHHTT JJOOIINN Department d OONN ee .. dd ee pp tt ii dd = dd .. dd ee pp tt iidd;;
sql
-- Basic join with all properties
SSEELLEECCTT ee.emp .emp_idid,,
ee..eemmpp nnaammee,,
ee .. ss aa ll aa rr yy ,, dd .. dd ee pp tt
nnaammee,, dd..llooccaattiioonn
FFRROOMM EEmmppllooyyeeee ee
IINNNNEERR JJOOIINN Department d OONN ee .. dd ee pp tt ii dd = dd .. dd ee pp tt iidd;;
sql
-- Count employees per department
SSEELLEECCTT ddeepptt ii dd ,, COUNT( *))
COUNT (*
aa ss eemmppllooyyeeee ccoouunntt
FFRROOMM EEmmppllooyyeeee
GGRROOUUPP BBYY ddeepptt ii dd ;;
-- Multiple grouping
SSEELLEECCTT dd.dept .dept_name
name,, dd .. ll oo cc aa tt ii oo nn ,,
COUNT(
OUNT(ee..eemmpp iidd)) aa ss eemmpp ccoouunntt
FFRROOMM EEmmppllooyyeeee ee
IINNNNEERR JJOOIINN Department d OONN
ee .. dd ee pp tt ii dd = dd .. dd ee pp tt ii dd
GGRROOUUPP BY dd .. dd ee pp tt nnaammee,,
dd..llooccaattiioonn
HHAAVVIINNGG COUNT(
OUNT (ee..eemmpp iidd)) > 33;;
java
pp uu bb ll ii cc vv oo ii dd
printMaxMinFrequency(
printMaxMinFrequency (iinntt[[]] aa rr rr )) {{
MMaapp<<Integer Integer,, IInntteeggeerr>>
ffrreeqqMMaapp = nneeww
HHaasshhMMaapp<<>>(());;
// Count frequencies
ffoorr ((iinntt nnuumm : aarrrr)) {{
ff rr ee qq MM aa pp ..put
put((nn uu mm ,, ffrreeqqMMaapp..getOrDefault
getOrDefault((num,
num, 00 )) + 11));;
}}
iinntt mmaaxxFFrreeqq =
IInntteeggeerr..MMIINN
V V A A LLU U E E ; ; iinntt
mmiinnFFrreeqq =
IInntteeggeerr..MMAAXX
V V A A LLU U E E ; ; ii nn tt
mmaaxxEElleemmeenntt =
aa rr rr [[ 00 ]] ;;
iinntt mmiinnEElleemmeenntt = aarrrr[[00]];;
SSyysstteemm.out .out..println
println((""MMaaxx
ffrreeqquueennccyy ee ll ee mm ee nn tt :: "" +
mmaaxxEElleemmeenntt + ""
(( ff rr ee qq uu ee nn cc yy :: "" +
mmaaxxFFrreeqq + ""))""));;
SSyysstteemm.out
.out..println
println((""MMiinn ffrreeqquueennccyy ee ll ee mm ee nn tt :: "" +
mmiinnEElleemmeenntt +
"" ((ffrreeqquueennccyy:: "" + mmiinnFFrreeqq + ""))""));;
}}
// Time: O(n), Space: O(n)
Approach 2 - Stream API (Optimal):
jav
a
pp uu bb ll ii cc vv oo ii dd
printMaxMinFrequencyS
printMaxMinFrequencyStream( tream (iinntt[[]] aa rr rr ))
{{ MMaapp<<Integer, Integer, LLoonngg>>
ffrreeqqMMaapp =
AArrrraayyss..stream(
stream (aarrrr))
..boxed(
boxed ( ) )
..collect(
collect (CCoolllleeccttoorrss..grou
pingBy(
pingBy ( FFuunncc ttiioo nn.. iden
tity(
tity ()),,
CCoolllleeccttoorrss..counting(
counting ()
)
)))); ;
jav
a
pp uu bb ll ii cc ii nn tt findKthLargestNoSort((iinntt[[]]
nnuummss,, ii nn tt kk )) {{
PPrriioorriittyyQQuueeuuee<<Integer>
mmiinnHHeeaapp = nneeww
PPrriioorriittyyQQuueeuuee<<>>(());;
ff oo rr (( ii nn tt
nnuum m :
nnuummss)) {{
mmiinnHHeeaapp
..offer((nnuumm))
;;
iiff ((minHeap.size(()) > kk )) {{
mm ii nn HH ee aa pp .. poll(( )) ;;
}}
}}
Approach 2 - QuickSelect (Most Optimal):
java
pp uu bb ll ii cc ii nn tt findK
findKthLargestQuickSelect(
thLargestQuickSelect (iinntt[[]] nnuummss,, ii nn tt kk )) {{
rr ee tt uu rr nn quickSelect(nums
quickSelect(nums,, 00 ,, nn uu mm ss .length - 1,, nnuummss..lleennggtthh - kk )) ;;
}}
pp rr ii vv aa tt ee ii nn tt quickSelect(
quickSelect(iinntt[[]]
nnuummss,, int left, ii nn tt rr ii gg hh tt ,, ii nn tt kk ))
{{ iiff ((left == rriigghhtt)) rr ee tt uu rr nn
nn uu mm ss [[ ll ee ff tt ]] ;;
iiff ((kk ==
ppiivvoottIInnd
deexx)) {{
rreettuurrnn
nn uu mm ss [[ kk ]
] ;;
}} eellssee iiff ((kk < ppiivvoottIInnddeexx)) {{
rr ee tt uu rr nn quickSelect(nums
quickSelect(nums,, lleefftt,, pp ii vv oo tt II nn dd ee xx - 11 ,, kk));;
}} eellssee {{
rr ee tt uu rr nn quickSelect(nums
quickSelect(nums,, pp ii vv oo tt II nn dd ee xx + 11 ,, rriigghhtt,, kk));;
}}
}}
pp rr ii vv aa tt ee iinntt partition(
partition(iinntt[[]] nnuummss,, int left,
iinntt rriigghhtt,, iinntt pp ii vv oo tt II nn dd ee xx )) {{
iinntt ppiivvoottVVaalluuee =
nnuumm ss[[ppiivvoo ttIInnddeexx]];;
swap(
swap (nnuummss,,
ppiivvoottIInnddeexx,,
rriigghhtt));; iinntt
ss tt oo rr ee II nn dd ee xx =
lleefftt;;
pp rr ii vv aa tt ee vv oo ii dd
swap(
swap(iinntt[[]] nnuummss,, iinntt
ii,, iinntt jj)) {{ iinntt tteemmpp
= nn uu mm ss [[ ii ]] ;;
nnuummss[[ii]]
=
nnuummss[[jj]];
;
nn uu mm ss [[ jj ]
] = tteemmpp;;
}}
// Time: O(n) average, Space: O(1)
45.Find palindrome in string list
Question: Find all palindrome strings from a list.
java
pp uu bb ll ii cc LLiisstt<Sttrriinngg>>
findPalindromes((LLiisstt<<Sttrriinngg>>
ssttrriinnggss)) {{ LLiisstt<<String>>
ppaalliinnddrroommeess = nneeww
AA rr rr aa yy LL ii ss tt << >> (( )) ;;
ffoorr ((SSttrriinngg
ssttrr :
ssttrriinnggss)) {{
iiff
((isPalindrome((ssttr
r)))) {{
ppaalliinnddrroommeess..add((ssttrr));;
}}
}}
rreettuurrnn pp aa ll ii nn dd rr oo mm ee ss ;;
}}
pp rr ii vv aa tt ee bboooolleeaann
isPalindrome((SSttrriinngg ss)) {{
ii nn tt ll ee ff tt = 0,, rr ii gg hh tt =
ss..length(()) - 11 ;; ww hh ii ll ee
((lleefftt < rriigghhtt)) {{
iiff ((s.charAt((lleefftt)) !=
ss..charAt((rriigghhtt)))) {{
rr ee tt uu rr nn ffaallssee;;
}}
Approach 2 - Stream API (Optimal):
jav
a
pp uu bb ll ii cc LL ii ss tt <Stt rr ii nn gg >>
findPalindromesStream((List<SSttrriinngg>>
ss tt rr ii nn gg ss )) {{ rr ee tt uu rr nn
ssttrriinnggss..stream(())
.. filter(( tt hh ii ss ::isPalindrome))
.. collect((CC oo lllleecc ttoo rrss.. toList(())));;
}}
java
pp uu bb ll ii cc SString[]]
sortStrings((SSttrriinngg[[]]
ss tt rr ii nn gg ss )) {{ rr ee tt uu rr nn
AArrrraayyss..stream((ssttrriinngg
ss))
..sorted(())
..toArray(Sttrriinngg[[]]::nneeww));;
}}
Approach 2 - Custom Comparators (Optimal):
jav
a
ppuubblliicc ccllaassss SSttrriinnggSSoorrttiinngg {{
// Sort by length
pp uu bb ll ii cc SString
tring[[]]
sortByLength(
sortByLength (SSttrriinngg[[]]
ss tt rr ii nn gg ss )) {{ rr ee tt uu rr nn
AArrrraayyss..stream stream((ssttrriinnggss))
..sorted
sorted((Comparator. comparingInt((SSttrriinngg::length
Comparator .comparingInt ::length))))
..toArray
toArray((Sttrriinngg[[]]::
::nneeww));;
}}
// Sort case-insensitive
case-insensitive
pp uu bb ll ii cc SString
tring[[]]
sortCaseInsensitive(
sortCaseInsensitive (SSttrriinngg[[]]
ss tt rr ii nn gg ss )) {{ rr ee tt uu rr nn
AArrrraayyss..stream stream((ssttrriinnggss))
..sorted
sorted((SSttrriinngg..CCAASSEE IINNSSEENNSSIITTIIVVEE OORRDDEERR))
..toArray
toArray((Sttrriinngg[[]]::
::nneeww));;
}}
java
java
pp uu bb ll ii cc SString
reverseStringStream((SSttrriinngg ssttrr))
{{ rr ee tt uu rr nn ssttrr..chars(())
..mapToObj(cc -> (( cc hh aa rr )) cc))
..reduce("",, ((s, c) -> c + ss,, (s1, s2) -> ss22 + s1);;
}}
jav
a
pp uu bb ll ii cc SString
reverseStringIntStream((SSttrriinngg ssttrr))
{{ rr ee tt uu rr nn
IInnttSStream.range((00,,
ssttrr..length(())))
..map(i -> ssttrr..charAt(str.length(()) - 11 - ii))))
.. collect(( SStt rr ii nn gg BB uu ii ll dd
ee rr ::nn ee ww ,,
SSttrriinnggBBuuiillddeerr::a
ppendCodePoint,,
SStt rr ii nn gg BB uu ii ll dd ee rr ::
sql
-- UNION: Combine results, remove
duplicates SSEELLEECCTT eemmpp ii dd ,,
eemmpp nnaammee FFRROOMM
EEmmppllooyyeeee11 UUNNIIOONN
SSEELLEECCTT eemmpp iidd,, eemmpp nnaammee FFRROOMM EEmmppllooyyeeee22;;
pp uu bb ll ii cc bboooolleeaann
isBalanced(
isBalanced (SSttrriinngg ss)) {{
SSttaacckk< <Character>
Character > ssttaacckk
= nneeww SSttaa cc kk <<>>(());;
ff oo rr ((char
char c : ss..toCharArray
toCharArray(()))) {{
iiff ((c
c == ''(('' || cc == ''{{'' || cc
== ''[['')) {{
ss tt aa cc kk ..push
push(( cc )) ;;
}} ee ll ss ee if (cc == ''))'' || cc == ''}}'' || cc == '']]'')) {{
iiff
((ssttaacckk..isEmp
isEmp
ty(
ty ()))) {{
rr ee tt uu rr nn
ffaallssee;;
}}
cchhaarr ttoopp = ssttaacckk..pop pop(());;
iiff ((!!
isMatchingP
isMatchingPair( air (ttoop
p,, cc)))) {{
rr ee tt uu rr nn
ffaallssee;;
}}
}}
}}
pp rr ii vv aa tt ee bboooolleeaann
isMatchingP
isMatchingPair( air (cchhaarr ooppeenn,, cc hh aa rr
cc ll oo ss ee )) {{ rr ee tt uu rr nn ((open
open == ''((''
&& cc ll oo ss ee == ''))'')) ||
((ooppeenn == ''{{'' && cc ll oo ss ee == ''}}'')) ||
((ooppeenn == ''[['' && cc ll oo ss ee == '']]''));;
}}
// Time: O(n), Space: O(n)
jav
a
pp uu bb ll ii cc bboooolleeaann
isBalancedDeque((SSttrriinngg ss)) {{
DDeeqquuee<<Character> ss tt aa cc kk =
nneeww AArrrraayyDDeeqquuee<<>>(());;
MMaapp<<Character, CChhaarraacctteerr>>
pp aa ii rr ss = MM aa pp .. of((
' ' ))' ' , , ' ' ((' ' , ,
''}}'',, ''{{'',,
' ' ]]' ' , , ' ' [[' '
)); ;
ff oo rr ((char c :
ss..toCharArray(()))) {{
iiff ((pairs.containsValue((cc))))
{{
// Opening bracket
ss tt aa cc kk .. push(( cc )) ;;
}} ee ll ss ee if (ppaaiirrss..containsKey((cc)))) {{
// Closing bracket
iiff ((stack.isEmpty(() || stack.pop()) !=
pp aa ii rr ss .. get(( cc )) )) {{
rr ee tt uu rr nn ff aa ll ss ee ;;
}}
}}
}}
rreettuurrnn ss tt aa cc kk .. isEmpty(( )) ;;
jav
a
ppuubblliicc ccllaassss DDeeaaddlloocckkDDeemmoo {{
ttrryy {{
TThhrreeaadd..sleep
sleep((110000));;
}} ccaattcchh
((IInntteerrrruupptteeddEExxcceeppttii
oonn ee)) {{ ee..print
printS
StackT
tackTrace(
race ());;
}}
SSyysstteemm.out
.out..println
println((""TThhrreeaadd 11::
WWaaiittiinngg ffoorr rr ee ss oo uu rr cc ee 22""));;
ssyynncchhrroonniizzeedd (( rr ee ss oo uu rr cc ee 22 )) {{
SSyysstteemm.out
.out..println
println((""TThhrreeaadd 11:: LLoocckkeedd rr ee ss oo uu rr cc ee 22""));;
}}
}}
} } )); ;
ttrryy {{
TThhrreeaadd..sleep
sleep((110000));;
}} ccaattcchh
((IInntteerrrruupptteeddEExxcceeppttii
oonn ee)) {{ ee..print
printS
StackT
tackTrace(
race ());;
}}
SSyysstteemm.out
.out..println
println((""TThhrreeaadd 22::
WWaaiittiinngg ffoorr rr ee ss oo uu rr cc ee 11""));;
ssyynncchhrroonniizzeedd (( rr ee ss oo uu rr cc ee 11 )) {{
SSyysstteemm.out
.out..println
println((""TThhrreeaadd 22:: LLoocckkeedd rr ee ss oo uu rr cc ee 11""));;
}}
}}
} } )); ;
tthhrreeaadd11..start
start(()
); ;
tthhrreeaadd22..start
start(()
); ;
}
} }
}
java
tthhrreeaadd11..start(
start ()
); ;
tthhrreeaadd22..start(
start ()
;
);
}}
}}
jav
a
cc ll aa ss ss
EEmmppllooyyee
ee {{
pprriivvaattee
SSttrriinngg
nnaammee;;
pprriivvaattee
LLooccaallDDaattee
jjooiinniinnggDDaattee;;
pp rr ii vv aa tt ee iinntt
aa gg ee ;;
// Getters
pp uu bb ll ii cc SString
tring getName(
getName ()) {{ rr ee tt uu rr nn nnaammee;; }}
pp uu bb ll ii cc LLooccaallDDaattee getJoiningDate(
getJoiningDate ()) {{
rr ee tt uu rr nn jj oo ii nn ii nn gg DD aa tt ee ;; }}
pp uu bb ll ii cc iinntt getAge(
getAge ()) {{ rr ee tt uu rr nn
aa gg ee ;; }}
}}
ccllaassss EEmmppllooyyeeeeSSoorrttiinngg {{
// Sort by age
ppuubblliicc LLiisstt<
<Sttrriinngg>>
sortByAge(
sortByAge (LLiisstt<<EEmmppllooyyeeee>>
eemmppllooyyeeeess)) {{ rr ee tt uu rr nn
eemmppllooyyeeeess..stream
stream(())
..sorted
sorted((Comparator. comparingInt((EEmmppllooyyeeee::getAge
Comparator .comparingInt ::getAge))))
..map
map((EEmmppllooyyeeee::getName
::getName))
..collect
collect((CCoolllleeccttoorrss..toList
toList(())));;
}}