Implement system to get most traded stocks in C#
$begingroup$
Please suggest way to solve a coding question, I came across. Question is as follows:
Implement a class StockMarket that has the two following functions:
class StockMarket
{
public:
void addTrade(string stockName, int share);
- This function keeps track the number of shares transacted for a stock by adding the trade information
void printTop(int numberOfStock);
- This function prints the top numberOfStock stocks that has the highest number of transacted shares
}
And here's a sample calling sequence that uses the above class:
StockMarket stockMarket = new StockMarket();
stockMarket.addTrade("GOOGLE", 50);
stockMarket.addTrade("APPLE", 150);
stockMarket.addTrade("GOOGLE", 100);
stockMarket.addTrade("MSFT", 250);
stockMarket.addTrade("GOOGLE", 200);
stockMarket.printTop(2);
Expected output:
GOOGLE 350
MSFT 250
I followed 2 approaches to solve this problem:
- Create Dictionary with Key - CompanyName and value - number of shares. While giving top results, I sorted dictionary by descending and returned results.
Time Complexity: Add - O(1) | GetTop - O(nlogn) + O(k)
- Create SortedSet with custom comparer to sort stocks with descending order. I am facing challanges to update SortedSet. I am not able to remove old entries with time less than O(n).
Please find below my current code :
public class StockNodeComparer : IComparer<StockNode>
{
public int Compare(StockNode s1, StockNode s2)
{
int result = s2.value.CompareTo(s1.value);
if (result == 0)
{
return 1;
}
else
{
return result;
}
}
}
public class StockNode
{
public int value;
public string name;
public StockNode(string n, int i)
{
name = n;
value = i;
}
}
public class StockContainer
{
public Dictionary<string, StockNode> map;
public SortedSet<StockNode> sortedStockList;
public StockContainer()
{
map = new Dictionary<string, StockNode>();
sortedStockList = new SortedSet<StockNode>(new StockNodeComparer());
}
public void AddValue(string s, int x)
{
if(map.ContainsKey(s))
{
int tempVal = map[s].value;
sortedStockList.Remove(map[s]);
var tempNode = new StockNode(s, tempVal + x);
AddNodeInDict(s, ref tempNode);
sortedStockList.Add(tempNode);
}
else
{
var tempNode = new StockNode(s, x);
AddNodeInDict(s, ref tempNode);
sortedStockList.Add(tempNode);
}
}
private void AddNodeInDict(string s, ref StockNode tempNode)
{
map[s] = tempNode;
}
public void GetTop(int k)
{
int i = 0;
while(i<k)
{
Console.WriteLine(sortedStockList.ElementAt(sortedStockList.Count - i).name);
}
}
}
c#
New contributor
$endgroup$
add a comment |
$begingroup$
Please suggest way to solve a coding question, I came across. Question is as follows:
Implement a class StockMarket that has the two following functions:
class StockMarket
{
public:
void addTrade(string stockName, int share);
- This function keeps track the number of shares transacted for a stock by adding the trade information
void printTop(int numberOfStock);
- This function prints the top numberOfStock stocks that has the highest number of transacted shares
}
And here's a sample calling sequence that uses the above class:
StockMarket stockMarket = new StockMarket();
stockMarket.addTrade("GOOGLE", 50);
stockMarket.addTrade("APPLE", 150);
stockMarket.addTrade("GOOGLE", 100);
stockMarket.addTrade("MSFT", 250);
stockMarket.addTrade("GOOGLE", 200);
stockMarket.printTop(2);
Expected output:
GOOGLE 350
MSFT 250
I followed 2 approaches to solve this problem:
- Create Dictionary with Key - CompanyName and value - number of shares. While giving top results, I sorted dictionary by descending and returned results.
Time Complexity: Add - O(1) | GetTop - O(nlogn) + O(k)
- Create SortedSet with custom comparer to sort stocks with descending order. I am facing challanges to update SortedSet. I am not able to remove old entries with time less than O(n).
Please find below my current code :
public class StockNodeComparer : IComparer<StockNode>
{
public int Compare(StockNode s1, StockNode s2)
{
int result = s2.value.CompareTo(s1.value);
if (result == 0)
{
return 1;
}
else
{
return result;
}
}
}
public class StockNode
{
public int value;
public string name;
public StockNode(string n, int i)
{
name = n;
value = i;
}
}
public class StockContainer
{
public Dictionary<string, StockNode> map;
public SortedSet<StockNode> sortedStockList;
public StockContainer()
{
map = new Dictionary<string, StockNode>();
sortedStockList = new SortedSet<StockNode>(new StockNodeComparer());
}
public void AddValue(string s, int x)
{
if(map.ContainsKey(s))
{
int tempVal = map[s].value;
sortedStockList.Remove(map[s]);
var tempNode = new StockNode(s, tempVal + x);
AddNodeInDict(s, ref tempNode);
sortedStockList.Add(tempNode);
}
else
{
var tempNode = new StockNode(s, x);
AddNodeInDict(s, ref tempNode);
sortedStockList.Add(tempNode);
}
}
private void AddNodeInDict(string s, ref StockNode tempNode)
{
map[s] = tempNode;
}
public void GetTop(int k)
{
int i = 0;
while(i<k)
{
Console.WriteLine(sortedStockList.ElementAt(sortedStockList.Count - i).name);
}
}
}
c#
New contributor
$endgroup$
$begingroup$
Just to be clear, you are returning the correct results but it is taking too long?
$endgroup$
– bruglesco
1 hour ago
add a comment |
$begingroup$
Please suggest way to solve a coding question, I came across. Question is as follows:
Implement a class StockMarket that has the two following functions:
class StockMarket
{
public:
void addTrade(string stockName, int share);
- This function keeps track the number of shares transacted for a stock by adding the trade information
void printTop(int numberOfStock);
- This function prints the top numberOfStock stocks that has the highest number of transacted shares
}
And here's a sample calling sequence that uses the above class:
StockMarket stockMarket = new StockMarket();
stockMarket.addTrade("GOOGLE", 50);
stockMarket.addTrade("APPLE", 150);
stockMarket.addTrade("GOOGLE", 100);
stockMarket.addTrade("MSFT", 250);
stockMarket.addTrade("GOOGLE", 200);
stockMarket.printTop(2);
Expected output:
GOOGLE 350
MSFT 250
I followed 2 approaches to solve this problem:
- Create Dictionary with Key - CompanyName and value - number of shares. While giving top results, I sorted dictionary by descending and returned results.
Time Complexity: Add - O(1) | GetTop - O(nlogn) + O(k)
- Create SortedSet with custom comparer to sort stocks with descending order. I am facing challanges to update SortedSet. I am not able to remove old entries with time less than O(n).
Please find below my current code :
public class StockNodeComparer : IComparer<StockNode>
{
public int Compare(StockNode s1, StockNode s2)
{
int result = s2.value.CompareTo(s1.value);
if (result == 0)
{
return 1;
}
else
{
return result;
}
}
}
public class StockNode
{
public int value;
public string name;
public StockNode(string n, int i)
{
name = n;
value = i;
}
}
public class StockContainer
{
public Dictionary<string, StockNode> map;
public SortedSet<StockNode> sortedStockList;
public StockContainer()
{
map = new Dictionary<string, StockNode>();
sortedStockList = new SortedSet<StockNode>(new StockNodeComparer());
}
public void AddValue(string s, int x)
{
if(map.ContainsKey(s))
{
int tempVal = map[s].value;
sortedStockList.Remove(map[s]);
var tempNode = new StockNode(s, tempVal + x);
AddNodeInDict(s, ref tempNode);
sortedStockList.Add(tempNode);
}
else
{
var tempNode = new StockNode(s, x);
AddNodeInDict(s, ref tempNode);
sortedStockList.Add(tempNode);
}
}
private void AddNodeInDict(string s, ref StockNode tempNode)
{
map[s] = tempNode;
}
public void GetTop(int k)
{
int i = 0;
while(i<k)
{
Console.WriteLine(sortedStockList.ElementAt(sortedStockList.Count - i).name);
}
}
}
c#
New contributor
$endgroup$
Please suggest way to solve a coding question, I came across. Question is as follows:
Implement a class StockMarket that has the two following functions:
class StockMarket
{
public:
void addTrade(string stockName, int share);
- This function keeps track the number of shares transacted for a stock by adding the trade information
void printTop(int numberOfStock);
- This function prints the top numberOfStock stocks that has the highest number of transacted shares
}
And here's a sample calling sequence that uses the above class:
StockMarket stockMarket = new StockMarket();
stockMarket.addTrade("GOOGLE", 50);
stockMarket.addTrade("APPLE", 150);
stockMarket.addTrade("GOOGLE", 100);
stockMarket.addTrade("MSFT", 250);
stockMarket.addTrade("GOOGLE", 200);
stockMarket.printTop(2);
Expected output:
GOOGLE 350
MSFT 250
I followed 2 approaches to solve this problem:
- Create Dictionary with Key - CompanyName and value - number of shares. While giving top results, I sorted dictionary by descending and returned results.
Time Complexity: Add - O(1) | GetTop - O(nlogn) + O(k)
- Create SortedSet with custom comparer to sort stocks with descending order. I am facing challanges to update SortedSet. I am not able to remove old entries with time less than O(n).
Please find below my current code :
public class StockNodeComparer : IComparer<StockNode>
{
public int Compare(StockNode s1, StockNode s2)
{
int result = s2.value.CompareTo(s1.value);
if (result == 0)
{
return 1;
}
else
{
return result;
}
}
}
public class StockNode
{
public int value;
public string name;
public StockNode(string n, int i)
{
name = n;
value = i;
}
}
public class StockContainer
{
public Dictionary<string, StockNode> map;
public SortedSet<StockNode> sortedStockList;
public StockContainer()
{
map = new Dictionary<string, StockNode>();
sortedStockList = new SortedSet<StockNode>(new StockNodeComparer());
}
public void AddValue(string s, int x)
{
if(map.ContainsKey(s))
{
int tempVal = map[s].value;
sortedStockList.Remove(map[s]);
var tempNode = new StockNode(s, tempVal + x);
AddNodeInDict(s, ref tempNode);
sortedStockList.Add(tempNode);
}
else
{
var tempNode = new StockNode(s, x);
AddNodeInDict(s, ref tempNode);
sortedStockList.Add(tempNode);
}
}
private void AddNodeInDict(string s, ref StockNode tempNode)
{
map[s] = tempNode;
}
public void GetTop(int k)
{
int i = 0;
while(i<k)
{
Console.WriteLine(sortedStockList.ElementAt(sortedStockList.Count - i).name);
}
}
}
c#
c#
New contributor
New contributor
New contributor
asked 1 hour ago
AkshayPAkshayP
1
1
New contributor
New contributor
$begingroup$
Just to be clear, you are returning the correct results but it is taking too long?
$endgroup$
– bruglesco
1 hour ago
add a comment |
$begingroup$
Just to be clear, you are returning the correct results but it is taking too long?
$endgroup$
– bruglesco
1 hour ago
$begingroup$
Just to be clear, you are returning the correct results but it is taking too long?
$endgroup$
– bruglesco
1 hour ago
$begingroup$
Just to be clear, you are returning the correct results but it is taking too long?
$endgroup$
– bruglesco
1 hour ago
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function () {
return StackExchange.using("mathjaxEditing", function () {
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
});
});
}, "mathjax-editing");
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "196"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
AkshayP is a new contributor. Be nice, and check out our Code of Conduct.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f211794%2fimplement-system-to-get-most-traded-stocks-in-c%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
AkshayP is a new contributor. Be nice, and check out our Code of Conduct.
AkshayP is a new contributor. Be nice, and check out our Code of Conduct.
AkshayP is a new contributor. Be nice, and check out our Code of Conduct.
AkshayP is a new contributor. Be nice, and check out our Code of Conduct.
Thanks for contributing an answer to Code Review Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f211794%2fimplement-system-to-get-most-traded-stocks-in-c%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
$begingroup$
Just to be clear, you are returning the correct results but it is taking too long?
$endgroup$
– bruglesco
1 hour ago