Тёмный

Find Valid Matrix Given Row and Column Sums - Leetcode 1605 - Python 

NeetCodeIO
Подписаться 181 тыс.
Просмотров 10 тыс.
50% 1

Опубликовано:

 

15 сен 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 57   
@HuyLe-zx8ko
@HuyLe-zx8ko Месяц назад
I feel stupid
@yang5843
@yang5843 Месяц назад
Neetcode? More like Elitecode
@DeathSugar
@DeathSugar Месяц назад
elite aka leet is literally the thing where you write your solutions
@sojwalgosavi4406
@sojwalgosavi4406 Месяц назад
for java users, intialize currentColSum as in long so it wont overflow the int Thanks for this intuitive solution
@anandsahoo3711
@anandsahoo3711 Месяц назад
thanks bro i was not able to pass the last test case
@AnandKumar-kz3ls
@AnandKumar-kz3ls Месяц назад
your first solution was brilliant
@glenwu3523
@glenwu3523 Месяц назад
Man... Wish one day I could solve these problems like you did in an interview....
@saswatmishra4055
@saswatmishra4055 Месяц назад
How to come up with thse intuitions? I am trying to solve but these problems leave me completely blank, i tried for 10mins and gave up ):
@chrischika7026
@chrischika7026 Месяц назад
its greedy you cant really come up with it.
@Its_Shubham_Negi
@Its_Shubham_Negi Месяц назад
@@chrischika7026 exactly
@neks2081
@neks2081 Месяц назад
more practice, start doing more greedy problems, look and understand solutions deeply
@ZeEduardo95
@ZeEduardo95 Месяц назад
Doing more problems. Tracking where you're good at and improving the topics where you suck. Researching harder exercises when you think you are good at something also helps. Try to be as balanced as possible and dominate as many areas as you can. Being self aware and auto critical helps too. Keep going!
@thehappydeveloperguide
@thehappydeveloperguide Месяц назад
@@ZeEduardo95 I think he asked what is the intuition for the current problem, how he come to the solution, something like proof in maths if i'm not wrong. You can easily solve many problems without understanding it fully but you practice a lot in Leetcode and just solve it when you see the x100 times the same problem. I think there is more logic then the greedy paradigm right here, the row sum which is exceeding the current column get propagated to the other columns and I think we stop when there is no remainder left, which is achieved on the last column. So the greedy part is just a "part" from the whole logic I am also struggling to understand why this exactly works, so deeper explanation will be good :). Otherwise perfect advices from you. Thank you !
@KnightMirkoYo
@KnightMirkoYo Месяц назад
Thank you so much, your daily explanations are invaluable
@freecourseplatformenglish2829
@freecourseplatformenglish2829 Месяц назад
Actually It was 2nd solution that came to my mind first. Thanks for detailed explainiation.
@MP-ny3ep
@MP-ny3ep Месяц назад
Phenomenal explanation as always. Thank you !!!
@ashishkarn9283
@ashishkarn9283 Месяц назад
The last solution is really a brilliant idea.
@user-eq9zo5vj7c
@user-eq9zo5vj7c Месяц назад
I just realized I should do matrix problems more often.
@anandsrikumar007
@anandsrikumar007 Месяц назад
Awesome explanation bro. I solved it.
@justanuhere
@justanuhere Месяц назад
you have awesome explanations
@galkk3
@galkk3 Месяц назад
my solution, it is more like the second solution that you talked about, same TC and SC: ROWS, COLS = len(rowSum), len(colSum) grid = [[0] * COLS for _ in range(ROWS)] while ROWS > 0 and COLS > 0: minRow = min(rowSum) minCol = min(colSum) rowIndex = rowSum.index(minRow) colIndex = colSum.index(minCol) if minRow < minCol: rowSum[rowIndex] = float("inf") colSum[colIndex] -= minRow grid[rowIndex][colIndex] = minRow ROWS -= 1 else: rowSum[rowIndex] -= minCol colSum[colIndex] = float("inf") grid[rowIndex][colIndex] = minCol COLS -= 1 return grid
@DeathSugar
@DeathSugar Месяц назад
Come up with the second soultuion and it was even cleaner. It's named monte-carlo method if I remember correctly
@juanmacias5922
@juanmacias5922 Месяц назад
I filled the first column with the max, and I was keeping a curr count to populate the next column with the overflow.
@abhijeetsarkar7541
@abhijeetsarkar7541 Месяц назад
that's a good idea too!
@sidforreal
@sidforreal Месяц назад
I kinda like the second approach more, felt more logical
@bhuvan9956
@bhuvan9956 Месяц назад
Easier way to write first approach ROWS = len(rowSum) COLS = len(colSum) currColSum = sum(rowSum) matrix = [[0] * COLS for _ in range(ROWS)] # put all rowSum values in their corresponding row # in the first column to balance it out to other columns for i in range(ROWS): matrix[i][0] = rowSum[i] for col in range(COLS - 1): extraSum = currColSum - colSum[col] # for the next column so we dont have to calcuate the # next col's sum total current Sum again currColSum = extraSum for row in range(ROWS): if extraSum == 0: break minValue = min(extraSum, matrix[row][col]) matrix[row][col] -= minValue extraSum -= minValue matrix[row][col + 1] += minValue return matrix
@sddkmweervra
@sddkmweervra Месяц назад
11:50
@abhilashpatel6852
@abhilashpatel6852 Месяц назад
I came up with the second one and believe now that first one is better than mine 😅
@michaelroditis1952
@michaelroditis1952 Месяц назад
Second solution is faster because you don't need to pass through all cells, even if they're the same complexity
@yashshukla1637
@yashshukla1637 Месяц назад
Inner while loop is not needed ``` class Solution: def restoreMatrix(self, rowSum: List[int], colSum: List[int]) -> List[List[int]]: ROWS = len(rowSum) COLS = len(colSum) result = [] for i in range(0, ROWS): row = [] for j in range(0, COLS): row.append(0) result.append(row) ## initialize rows for row in range(0,ROWS): result[row][0] = rowSum[row] for col in range(0, COLS): current_col_sum = 0 # get the whole col sum for row in range(0, ROWS): current_col_sum += result[row][col] if current_col_sum > colSum[col]: diff = current_col_sum - colSum[col] max_shift = min(result[row][col], diff) result[row][col] -= max_shift result[row][col + 1] += max_shift current_col_sum -= max_shift return result ```
@jessesinger4790
@jessesinger4790 Месяц назад
Very nice
@abhishekkumar-fe8lw
@abhishekkumar-fe8lw Месяц назад
Getting wrong answer for the last tescases which consists of 1e8 in all cells,i am not able to see the whole output class Solution { public int[][] restoreMatrix(int[] rowSum, int[] colSum) { int n=rowSum.length; int m=colSum.length; int[][] ans=new int[n][m]; for(int i=0;i
@028_ds_khushi_bohra2
@028_ds_khushi_bohra2 Месяц назад
same
@ParthCoool
@ParthCoool Месяц назад
+1
@NeetCodeIO
@NeetCodeIO Месяц назад
Huh, now I'm curious because your code looks correct. I don't see anywhere that an overflow could occur either, that's strange.
@NeetCodeIO
@NeetCodeIO Месяц назад
Actually based on a solution someone else shared I think cursum and diff should be doubles / long. While it's true rowSum param is integers, the sum of rowSum could overflow a 32bit int.
@chandlerbing8164
@chandlerbing8164 Месяц назад
only Simple for you cause you come from math background.
@corrogist692
@corrogist692 Месяц назад
I converted the two inputs as minheaps and keep popping and pushing back their val differences to the heap with a larger value, does this make the time complexity faster/slower?
@corrogist692
@corrogist692 Месяц назад
##Heres how i did it: class Solution: def restoreMatrix(self, rowSum: List[int], colSum: List[int]) -> List[List[int]]: #Create res matrix m, n = len(rowSum), len(colSum) res=[[0] * n for _ in range(m)] #maintain two min heaps rowheap=[(s, i) for i, s in enumerate(rowSum)] heapq.heapify(rowheap) colheap=[(s, i) for i, s in enumerate(colSum)] heapq.heapify(colheap) while rowheap and colheap: rowval, rowidx=heapq.heappop(rowheap) colval, colidx=heapq.heappop(colheap) res[rowidx][colidx]=min(rowval, colval) if rowval>colval: heapq.heappush(rowheap, (rowval-colval, rowidx)) elif colval>rowval: heapq.heappush(colheap, (colval-rowval, colidx)) return res
@0ManPiano0
@0ManPiano0 Месяц назад
damn... I feel dumb not being even able to come up with a working solution...
@moabd7575
@moabd7575 Месяц назад
EDIT: never mind, i used long long for "diff" and "max_shift" and it worked getting integer overflow with C++ in the variable "curr_col_max" i used long long but i get negative values in the result array any solution?
@eslamwageh4461
@eslamwageh4461 Месяц назад
did u find one ?
@fauzudheenabdulhameed8399
@fauzudheenabdulhameed8399 Месяц назад
Is n't this the easiest way to do it, Just find the min(rowSum, colSum) and append it to res. Also alter the input arrays. class Solution: def restoreMatrix(self, rowSum: List[int], colSum: List[int]) -> List[List[int]]: res = [] for i in range(len(rowSum)): row = [] for j in range(len(colSum)): curr = min(rowSum[i], colSum[j]) rowSum[i] -= curr colSum[j] -= curr row.append(curr) res.append(row) return res but i came up with this just by looking the examples, might not be intuitive in anyway.
@user-eq9zo5vj7c
@user-eq9zo5vj7c Месяц назад
It's follows the same approach as the code in the editorial but still it's really a brilliant approach.
@pastori2672
@pastori2672 Месяц назад
i felt insane after getting the most optimal solution first try
@pastori2672
@pastori2672 Месяц назад
you are insane
@pastori2672
@pastori2672 Месяц назад
@pastori2672 you think so ?
@pastori2672
@pastori2672 Месяц назад
@pastori2672 definitely
@Its_Shubham_Negi
@Its_Shubham_Negi Месяц назад
@@pastori2672 self-talk 😆
@yuvrajmalhotra9276
@yuvrajmalhotra9276 Месяц назад
@@pastori2672 is it Self-obsession or you seen fight club ?
@yang5843
@yang5843 Месяц назад
My logic might be easier to understand class Solution { public int[][] restoreMatrix(int[] rowSum, int[] colSum) { int[][] rc = new int[rowSum.length][colSum.length]; for (int i=0;i
@harshadevarakonda7965
@harshadevarakonda7965 Месяц назад
May I know why you used double over long datatype and when double is replaced by long the solution isn't getting accepted.
@chien-yuyeh9386
@chien-yuyeh9386 Месяц назад
🎉🎉First 😂
@qulinxao
@qulinxao Месяц назад
class Solution: def restoreMatrix(self, r: List[int], c: List[int]) -> List[List[int]]: m=[[0]*len(c)for _ in range(len(r))] g=[[(v,e)for e,v in enumerate(b)if v]for b in [r,c]] for v in g:heapify(v) while g[0]: m[g[0][0][1]][g[1][0][1]]=(z:=min(g[0][0],g[1][0])[0]) for w in g: if(t:=w[0][0]-z): heapreplace(w,(t,w[0][1])) else: heappop(w) return m
@chaitanyasharma6270
@chaitanyasharma6270 Месяц назад
public class Solution { public int[][] RestoreMatrix(int[] rowSum, int[] colSum) { int [][] a=new int[rowSum.Length][]; for(int i=0;i
@user-hp3ii3id9h
@user-hp3ii3id9h Месяц назад
Matrix week😂
@anmolgangwal9236
@anmolgangwal9236 Месяц назад
no offence but 2nd solution seems more easier😂
Далее
Каха и жена (недопонимание)
00:37
БЕЛКА РОЖАЕТ? #cat
00:21
Просмотров 602 тыс.
Programming Languages I used at Google (C++ rant)
6:14
How I would learn Leetcode if I could start over
18:03
Просмотров 508 тыс.
How to Solve ANY LeetCode Problem (Step-by-Step)
12:37
Просмотров 212 тыс.
The Unfair Way I Got Good At LeetCode
23:02
Просмотров 81 тыс.
LeetCode was HARD until I Learned these 15 Patterns
13:00
How Fast can Python Parse 1 Billion Rows of Data?
16:31
Sort the Jumbled Numbers - Leetcode 2191 - Python
12:37
Programming with Math | The Lambda Calculus
21:48
Просмотров 186 тыс.
Coding Interviews Be Like
5:31
Просмотров 6 млн
Каха и жена (недопонимание)
00:37