Implement system to get most traded stocks in C#












0












$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:




  1. 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)




  1. 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);
}
}
}









share|improve this question







New contributor




AkshayP is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







$endgroup$












  • $begingroup$
    Just to be clear, you are returning the correct results but it is taking too long?
    $endgroup$
    – bruglesco
    1 hour ago
















0












$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:




  1. 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)




  1. 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);
}
}
}









share|improve this question







New contributor




AkshayP is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







$endgroup$












  • $begingroup$
    Just to be clear, you are returning the correct results but it is taking too long?
    $endgroup$
    – bruglesco
    1 hour ago














0












0








0





$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:




  1. 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)




  1. 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);
}
}
}









share|improve this question







New contributor




AkshayP is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







$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:




  1. 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)




  1. 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#






share|improve this question







New contributor




AkshayP is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











share|improve this question







New contributor




AkshayP is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









share|improve this question




share|improve this question






New contributor




AkshayP is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









asked 1 hour ago









AkshayPAkshayP

1




1




New contributor




AkshayP is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





New contributor





AkshayP is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






AkshayP is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.












  • $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




$begingroup$
Just to be clear, you are returning the correct results but it is taking too long?
$endgroup$
– bruglesco
1 hour ago










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.










draft saved

draft discarded


















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.










draft saved

draft discarded


















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.




draft saved


draft discarded














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





















































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







Popular posts from this blog

Список кардиналов, возведённых папой римским Каликстом III

Deduzione

Mysql.sock missing - “Can't connect to local MySQL server through socket”