My java solution : class Solution { public int[] getSumAbsoluteDifferences(int[] nums) { int len = nums.length; int[] prefixSum = new int[len + 1]; prefixSum[0] = 0; int sum = 0; int index = 1; for (int i = 0; i < len; i++) { sum += nums[i]; prefixSum[index] = sum; index++; } for (int i = 0; i < len; i++) { int x = (prefixSum[len] - prefixSum[i]) - (nums[i] * (len - i)); int y = (nums[i] * i) - prefixSum[i]; nums[i] = x + y; } return nums; } }
-Why does your code work but mine gets TLE they're almost identical: res = [0] * len(nums) s = sum(nums) prefix_sum = 0 postfix_sum = sum(nums) for i in range(len(nums)): postfix_sum -= nums[i] res[i] += postfix_sum - (len(nums[i + 1:]) * nums[i]) res[i] += (nums[i] * len(nums[:i])) - prefix_sum prefix_sum += nums[i] return res
you are using len operator on update list every time i mean you are using it on sliced array so it is calculated every single time loop runs and value of i gets updated every time ..when you use len(nums) without slicing it does not count length every time it is inbuily & more efficient thana o(N) ,,when you use slicing the len has to be calculated every time ...
@@AbhishekMakwana-p1vI'm quite certain len is never "calculated"/computed. A list always stores its length. But the slicing is indeed the issue because it creates a whole new list with the relevant elements which ofc is an O(n) operation.
Look to my code. nums = [2,3,5] new_list = [] count = 0 length_nums = len(nums) for i in range(length_nums ): for j in range(length_nums ): new_list.append(nums[count] - nums[j]) count += 1 positive_list = [abs(x) for x in new_list] result = [sum(positive_list[i:i+length_nums]) for i in range(0, len(positive_list), length_nums)] print(result)
Nice work! This problem cleverly uses what we know about prefixes and postfixes. Great job!
Time: O(n) and Space: O(1)
diff = sum(nums)
for i, num in enumerate(nums):
yield ((i
Bro I was just solving this question, you uploaded this video, what a perfect timing
thank your sir, learning a lot from you
The saviour has arrived 🙏
Will try to be consistent the rest of the year!
@@NeetCodeIO i know there must be reason for not uploading so no pressure upload whenever you feel like it.
Love your explaination ❤️
Great Content as always.
My java solution :
class Solution {
public int[] getSumAbsoluteDifferences(int[] nums) {
int len = nums.length;
int[] prefixSum = new int[len + 1];
prefixSum[0] = 0;
int sum = 0;
int index = 1;
for (int i = 0; i < len; i++) {
sum += nums[i];
prefixSum[index] = sum;
index++;
}
for (int i = 0; i < len; i++) {
int x = (prefixSum[len] - prefixSum[i]) - (nums[i] * (len - i));
int y = (nums[i] * i) - prefixSum[i];
nums[i] = x + y;
}
return nums;
}
}
Thankyou my niggahahahah loved your Solution it really helped ..may god make you a slave again in next life ...
Uh thanks 😅
wtf
-Why does your code work but mine gets TLE they're almost identical:
res = [0] * len(nums)
s = sum(nums)
prefix_sum = 0
postfix_sum = sum(nums)
for i in range(len(nums)):
postfix_sum -= nums[i]
res[i] += postfix_sum - (len(nums[i + 1:]) * nums[i])
res[i] += (nums[i] * len(nums[:i])) - prefix_sum
prefix_sum += nums[i]
return res
you are using len operator on update list every time i mean you are using it on sliced array so it is calculated every single time loop runs and value of i gets updated every time ..when you use len(nums) without slicing it does not count length every time it is inbuily & more efficient thana o(N) ,,when you use slicing the len has to be calculated every time ...
by the i am a big fan of berserk ...griffith did nothing wrong i mean ...casca enjoyed it
@@AbhishekMakwana-p1v ah i see
@@AbhishekMakwana-p1v i'll touch you
@@AbhishekMakwana-p1vI'm quite certain len is never "calculated"/computed. A list always stores its length. But the slicing is indeed the issue because it creates a whole new list with the relevant elements which ofc is an O(n) operation.
Look to my code.
nums = [2,3,5]
new_list = []
count = 0
length_nums = len(nums)
for i in range(length_nums ):
for j in range(length_nums ):
new_list.append(nums[count] - nums[j])
count += 1
positive_list = [abs(x) for x in new_list]
result = [sum(positive_list[i:i+length_nums]) for i in range(0, len(positive_list), length_nums)]
print(result)
Yes this is code
that's something man