diff --git a/Algorithm Analysis and Big O/Big O Examples .ipynb b/Algorithm Analysis and Big O/Big O Examples .ipynb index 9352c727..ecb3b342 100644 --- a/Algorithm Analysis and Big O/Big O Examples .ipynb +++ b/Algorithm Analysis and Big O/Big O Examples .ipynb @@ -15,7 +15,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -31,7 +31,7 @@ " '''\n", " Prints first item in a list of values.\n", " '''\n", - " print values[0]\n", + " print(values[0])\n", " \n", "func_constant([1,2,3])" ] @@ -52,7 +52,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -71,7 +71,7 @@ " Takes in list and prints out all values\n", " '''\n", " for val in lst:\n", - " print val\n", + " print(val)\n", " \n", "func_lin([1,2,3])" ] @@ -125,7 +125,7 @@ " '''\n", " for item_1 in lst:\n", " for item_2 in lst:\n", - " print item_1,item_2\n", + " print(item_1,item_2)\n", " \n", "lst = [0, 1, 2, 3]\n", "\n", @@ -154,9 +154,7 @@ { "cell_type": "code", "execution_count": 10, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "def print_once(lst):\n", @@ -164,7 +162,7 @@ " Prints all items once\n", " '''\n", " for val in lst:\n", - " print val" + " print(val)" ] }, { @@ -207,13 +205,13 @@ " Prints all items three times\n", " '''\n", " for val in lst:\n", - " print val\n", + " print(val)\n", " \n", " for val in lst:\n", - " print val\n", + " print(val)\n", " \n", " for val in lst:\n", - " print val" + " print(val)" ] }, { @@ -255,10 +253,8 @@ }, { "cell_type": "code", - "execution_count": 14, - "metadata": { - "collapsed": true - }, + "execution_count": 16, + "metadata": {}, "outputs": [], "source": [ "def comp(lst):\n", @@ -267,20 +263,20 @@ " Then is prints the first 1/2 of the list O(n/2)\n", " Then prints a string 10 times O(10)\n", " '''\n", - " print lst[0]\n", + " print(lst[0])\n", " \n", - " midpoint = len(lst)/2\n", + " midpoint = int(len(lst)/2)\n", " \n", " for val in lst[:midpoint]:\n", - " print val\n", + " print(val)\n", " \n", " for x in range(10):\n", - " print 'number'" + " print('number')" ] }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 17, "metadata": {}, "outputs": [ { @@ -334,7 +330,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 18, "metadata": { "collapsed": true }, @@ -352,7 +348,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 19, "metadata": {}, "outputs": [ { @@ -361,7 +357,7 @@ "[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]" ] }, - "execution_count": 21, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -372,7 +368,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 20, "metadata": {}, "outputs": [ { @@ -381,7 +377,7 @@ "True" ] }, - "execution_count": 22, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -392,7 +388,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 21, "metadata": {}, "outputs": [ { @@ -401,7 +397,7 @@ "False" ] }, - "execution_count": 24, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } @@ -427,10 +423,8 @@ }, { "cell_type": "code", - "execution_count": 25, - "metadata": { - "collapsed": true - }, + "execution_count": 23, + "metadata": {}, "outputs": [], "source": [ "def printer(n=10):\n", @@ -438,12 +432,12 @@ " Prints \"hello world!\" n times\n", " '''\n", " for x in range(n):\n", - " print 'Hello World!'" + " print('Hello World!')" ] }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 24, "metadata": {}, "outputs": [ { @@ -478,7 +472,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 25, "metadata": { "collapsed": true }, @@ -495,14 +489,15 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 26, "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "['new', 'new', 'new', 'new', 'new']\n" + "ename": "SyntaxError", + "evalue": "invalid syntax (, line 1)", + "output_type": "error", + "traceback": [ + "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m print create_list(5)\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" ] } ], diff --git a/Algorithm Analysis and Big O/Big O Notation.ipynb b/Algorithm Analysis and Big O/Big O Notation.ipynb index 28cb4211..327309ff 100644 --- a/Algorithm Analysis and Big O/Big O Notation.ipynb +++ b/Algorithm Analysis and Big O/Big O Notation.ipynb @@ -120,26 +120,24 @@ }, { "cell_type": "code", - "execution_count": 43, - "metadata": { - "collapsed": false - }, + "execution_count": 2, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 43, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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\n", + "image/png": "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\nrkJggg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -184,9 +182,9 @@ "metadata": { "anaconda-cloud": {}, "kernelspec": { - "display_name": "Python [conda env:python3]", + "display_name": "Python 3", "language": "python", - "name": "conda-env-python3-py" + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -198,9 +196,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.1" + "version": "3.6.2" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Algorithm Analysis and Big O/Big O for Python Data Structures.ipynb b/Algorithm Analysis and Big O/Big O for Python Data Structures.ipynb index dd014176..47c2a5a2 100644 --- a/Algorithm Analysis and Big O/Big O for Python Data Structures.ipynb +++ b/Algorithm Analysis and Big O/Big O for Python Data Structures.ipynb @@ -23,7 +23,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 4, "metadata": { "collapsed": true }, @@ -31,19 +31,41 @@ "source": [ "def method1():\n", " l = []\n", - " for n in xrange(10000):\n", + " for n in range(10000):\n", " l = l + [n]\n", "\n", "def method2():\n", " l = []\n", - " for n in xrange(10000):\n", + " for n in range(10000):\n", " l.append(n)\n", "\n", "def method3():\n", - " l = [n for n in xrange(10000)]\n", + " l = [n for n in range(10000)]\n", "\n", "def method4():\n", - " l = range(10000) # Python 3: list(range(10000))" + " l = list(range(10000)) # Python 3: list(range(10000))" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]\n" + ] + } + ], + "source": [ + "def method():\n", + " l = []\n", + " for n in range(10):\n", + " l = l + [n]\n", + " print(l)\n", + "method() " ] }, { @@ -55,17 +77,17 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "10 loops, best of 3: 162 ms per loop\n", - "1000 loops, best of 3: 820 µs per loop\n", - "1000 loops, best of 3: 307 µs per loop\n", - "10000 loops, best of 3: 77.7 µs per loop\n" + "171 ms ± 9.92 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n", + "714 µs ± 7.17 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n", + "292 µs ± 2.53 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n", + "162 µs ± 1.56 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)\n" ] } ], diff --git a/Algorithm Analysis and Big O/Introduction to Algorithm Analysis and Big O .ipynb b/Algorithm Analysis and Big O/Introduction to Algorithm Analysis and Big O .ipynb index 0238db22..2d1f2897 100644 --- a/Algorithm Analysis and Big O/Introduction to Algorithm Analysis and Big O .ipynb +++ b/Algorithm Analysis and Big O/Introduction to Algorithm Analysis and Big O .ipynb @@ -36,7 +36,7 @@ " Take an input of n and return the sum of the numbers from 0 to n\n", " '''\n", " final_sum = 0\n", - " for x in xrange(n+1): \n", + " for x in range(n+1): \n", " final_sum += x\n", " \n", " return final_sum" @@ -45,9 +45,7 @@ { "cell_type": "code", "execution_count": 5, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -66,7 +64,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "metadata": { "collapsed": true }, @@ -81,18 +79,16 @@ }, { "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false - }, + "execution_count": 7, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "55" + "55.0" ] }, - "execution_count": 9, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -115,17 +111,14 @@ }, { "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false - }, + "execution_count": 8, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "The slowest run took 5.15 times longer than the fastest. This could mean that an intermediate result is being cached \n", - "100000 loops, best of 3: 4.86 µs per loop\n" + "3.7 µs ± 77.6 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)\n" ] } ], @@ -135,17 +128,14 @@ }, { "cell_type": "code", - "execution_count": 12, - "metadata": { - "collapsed": false - }, + "execution_count": 9, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "The slowest run took 16.54 times longer than the fastest. This could mean that an intermediate result is being cached \n", - "10000000 loops, best of 3: 173 ns per loop\n" + "127 ns ± 0.398 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)\n" ] } ], @@ -172,23 +162,23 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.10" + "pygments_lexer": "ipython3", + "version": "3.6.2" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Array Sequences/Array Sequences Interview Questions/Array Sequence Interview Questions/Anagram Check .ipynb b/Array Sequences/Array Sequences Interview Questions/Array Sequence Interview Questions/Anagram Check .ipynb index fd6f0824..d86ecda6 100644 --- a/Array Sequences/Array Sequences Interview Questions/Array Sequence Interview Questions/Anagram Check .ipynb +++ b/Array Sequences/Array Sequences Interview Questions/Array Sequence Interview Questions/Anagram Check .ipynb @@ -25,23 +25,36 @@ }, { "cell_type": "code", - "execution_count": 26, - "metadata": { - "collapsed": false - }, + "execution_count": 40, + "metadata": {}, "outputs": [], "source": [ "def anagram(s1,s2):\n", + " myhash = [0]*256\n", + " s1 = s1.lower().replace(\" \", \"\")\n", + " s2 = s2.lower().replace(\" \", \"\")\n", + " \n", + " if(len(s1) != len(s2)):\n", + " return False\n", " \n", - " pass" + " for ch in s1:\n", + " idx = ord(ch)\n", + " myhash[idx] += 1\n", + " \n", + " for ch in s2:\n", + " idx = ord(ch)\n", + " myhash[idx] -= 1\n", + " \n", + " for val in myhash:\n", + " if(val):\n", + " return False\n", + " return True" ] }, { "cell_type": "code", - "execution_count": 27, - "metadata": { - "collapsed": false - }, + "execution_count": 41, + "metadata": {}, "outputs": [ { "data": { @@ -49,7 +62,7 @@ "True" ] }, - "execution_count": 27, + "execution_count": 41, "metadata": {}, "output_type": "execute_result" } @@ -60,10 +73,8 @@ }, { "cell_type": "code", - "execution_count": 34, - "metadata": { - "collapsed": false - }, + "execution_count": 42, + "metadata": {}, "outputs": [ { "data": { @@ -71,7 +82,7 @@ "True" ] }, - "execution_count": 34, + "execution_count": 42, "metadata": {}, "output_type": "execute_result" } @@ -82,10 +93,8 @@ }, { "cell_type": "code", - "execution_count": 35, - "metadata": { - "collapsed": false - }, + "execution_count": 43, + "metadata": {}, "outputs": [ { "data": { @@ -93,7 +102,7 @@ "False" ] }, - "execution_count": 35, + "execution_count": 43, "metadata": {}, "output_type": "execute_result" } @@ -113,9 +122,7 @@ { "cell_type": "code", "execution_count": 44, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -139,7 +146,7 @@ " assert_equal(sol('hi man','hi man'),True)\n", " assert_equal(sol('aabbcc','aabbc'),False)\n", " assert_equal(sol('123','1 2'),False)\n", - " print \"ALL TEST CASES PASSED\"\n", + " print(\"ALL TEST CASES PASSED\")\n", "\n", "# Run Tests\n", "t = AnagramTest()\n", @@ -148,16 +155,18 @@ }, { "cell_type": "code", - "execution_count": 45, - "metadata": { - "collapsed": false - }, + "execution_count": 39, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "ALL TEST CASES PASSED\n" + "ename": "NameError", + "evalue": "name 'anagram2' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtest\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0managram2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mNameError\u001b[0m: name 'anagram2' is not defined" ] } ], @@ -171,27 +180,36 @@ "source": [ "# Good Job!" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.11" + "pygments_lexer": "ipython3", + "version": "3.6.2" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Array Sequences/Array Sequences Interview Questions/Array Sequence Interview Questions/Array Pair Sum .ipynb b/Array Sequences/Array Sequences Interview Questions/Array Sequence Interview Questions/Array Pair Sum .ipynb index 50ee6bfa..4f7341d7 100644 --- a/Array Sequences/Array Sequences Interview Questions/Array Sequence Interview Questions/Array Pair Sum .ipynb +++ b/Array Sequences/Array Sequences Interview Questions/Array Sequence Interview Questions/Array Pair Sum .ipynb @@ -35,30 +35,121 @@ "outputs": [], "source": [ "def pair_sum(arr,k):\n", + " result = []\n", + " arr = sorted(arr)\n", + " idx1 = 0;\n", + " idx2 = len(arr) - 1\n", " \n", - " pass" + " while(idx1 < idx2):\n", + " if(arr[idx1] + arr[idx2] == k):\n", + " result.append((arr[idx1], arr[idx1]))\n", + " idx1 += 1\n", + " idx2 -= 1\n", + " if(arr[idx1] + arr[idx2] > k):\n", + " idx2 -= 1\n", + " if(arr[idx1] + arr[idx2] < k):\n", + " idx1 += 1 \n", + " \n", + " return len(result)" ] }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 52, "metadata": { - "collapsed": false + "collapsed": true }, + "outputs": [], + "source": [ + "def pair_sum(arr,k):\n", + " seen = set()\n", + " result = set()\n", + " for item in arr:\n", + " if(item in seen):\n", + " continue\n", + " seen.add(item) \n", + " if((k - item) in seen):\n", + " result.add((item, k - item))\n", + " print(seen) \n", + " return len(result) " + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{1, 2, 3}\n" + ] + }, { "data": { "text/plain": [ "2" ] }, - "execution_count": 14, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pair_sum([1,3,3,2,2,2],4)" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [], + "source": [ + "def pair_sum(arr,k):\n", + " if(len(arr) < 2):\n", + " return\n", + " seen = set()\n", + " result = set()\n", + " for item in arr:\n", + " target = k - item\n", + " if(target not in seen):\n", + " seen.add(item) \n", + " else:\n", + " result.add((min(item, target), max(item, target)))\n", + " print('\\n'.join(map(str, list(result)))) \n", + " print(seen)\n", + " return (result) " + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(1, 3)\n", + "(2, 2)\n", + "{1, 2}\n" + ] + }, + { + "data": { + "text/plain": [ + "{(1, 3), (2, 2)}" + ] + }, + "execution_count": 66, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "pair_sum([1,3,2,2],4)" + "pair_sum([1,3,3,2,2,2],4)" ] }, { @@ -70,10 +161,8 @@ }, { "cell_type": "code", - "execution_count": 16, - "metadata": { - "collapsed": false - }, + "execution_count": 29, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -95,7 +184,7 @@ " assert_equal(sol([1,9,2,8,3,7,4,6,5,5,13,14,11,13,-1],10),6)\n", " assert_equal(sol([1,2,3,1],3),1)\n", " assert_equal(sol([1,3,2,2],4),2)\n", - " print 'ALL TEST CASES PASSED'\n", + " print('ALL TEST CASES PASSED')\n", " \n", "#Run tests\n", "t = TestPair()\n", @@ -113,23 +202,23 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.10" + "pygments_lexer": "ipython3", + "version": "3.6.2" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Array Sequences/Array Sequences Interview Questions/Array Sequence Interview Questions/Find the Missing Element .ipynb b/Array Sequences/Array Sequences Interview Questions/Array Sequence Interview Questions/Find the Missing Element .ipynb index fe1e12d7..ba22b5dd 100644 --- a/Array Sequences/Array Sequences Interview Questions/Array Sequence Interview Questions/Find the Missing Element .ipynb +++ b/Array Sequences/Array Sequences Interview Questions/Array Sequence Interview Questions/Find the Missing Element .ipynb @@ -27,31 +27,106 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "def finder1(arr1,arr2):\n", + " sum = 0\n", + " for num in arr1:\n", + " sum += num\n", + " for num in arr2:\n", + " sum -= num\n", + " \n", + " return sum" + ] + }, + { + "cell_type": "code", + "execution_count": 30, "metadata": { "collapsed": true }, "outputs": [], "source": [ - "def finder(arr1,arr2):\n", - " \n", - " pass" + "def finder2(arr1, arr2):\n", + " arr1.sort()\n", + " arr2.sort()\n", + " for num1, num2 in zip(arr1, arr2):\n", + " if num1 != num2:\n", + " return num1\n", + " return arr1[-1]" ] }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 31, "metadata": { - "collapsed": false + "collapsed": true }, + "outputs": [], + "source": [ + "from collections import defaultdict\n", + "def finder3(arr1, arr2):\n", + " dic = defaultdict(int)\n", + " for num in arr2:\n", + " dic[num] += 1\n", + " for num in arr1:\n", + " if dic[num] == 0:\n", + " return num\n", + " dic[num] -= 1" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [], + "source": [ + "def finder4(arr1, arr2):\n", + " result = 0\n", + " for item in arr1 + arr2:\n", + " result ^= item\n", + " return result;" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "7\n", + "7\n", + "7\n", + "7\n" + ] + } + ], + "source": [ + "arr1 = [1,2,3,4,5,6,7]\n", + "arr2 = [3,5,2,1,4,6]\n", + "print(finder1(arr1,arr2))\n", + "print(finder2(arr1,arr2))\n", + "print(finder3(arr1,arr2))\n", + "print(finder4(arr1,arr2))" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "5" + "[(1, 3), (2, 7), (3, 2), (4, 1), (5, 4), (6, 6)]" ] }, - "execution_count": 46, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -64,10 +139,8 @@ }, { "cell_type": "code", - "execution_count": 47, - "metadata": { - "collapsed": false - }, + "execution_count": 4, + "metadata": {}, "outputs": [ { "data": { @@ -75,7 +148,7 @@ "5" ] }, - "execution_count": 47, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -89,9 +162,7 @@ }, { "cell_type": "markdown", - "metadata": { - "collapsed": false - }, + "metadata": {}, "source": [ "_____" ] @@ -105,10 +176,8 @@ }, { "cell_type": "code", - "execution_count": 43, - "metadata": { - "collapsed": false - }, + "execution_count": 6, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -130,7 +199,7 @@ " assert_equal(sol([5,5,7,7],[5,7,7]),5)\n", " assert_equal(sol([1,2,3,4,5,6,7],[3,7,2,1,4,6]),5)\n", " assert_equal(sol([9,8,7,6,5,4,3,2,1],[9,8,7,5,4,3,2,1]),6)\n", - " print 'ALL TEST CASES PASSED'\n", + " print('ALL TEST CASES PASSED')\n", "\n", "# Run test\n", "t = TestFinder()\n", @@ -147,23 +216,23 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.10" + "pygments_lexer": "ipython3", + "version": "3.6.2" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Array Sequences/Array Sequences Interview Questions/Array Sequence Interview Questions/Largest Continuous Sum .ipynb b/Array Sequences/Array Sequences Interview Questions/Array Sequence Interview Questions/Largest Continuous Sum .ipynb index a4220bb0..40265420 100644 --- a/Array Sequences/Array Sequences Interview Questions/Array Sequence Interview Questions/Largest Continuous Sum .ipynb +++ b/Array Sequences/Array Sequences Interview Questions/Array Sequence Interview Questions/Largest Continuous Sum .ipynb @@ -16,22 +16,46 @@ }, { "cell_type": "code", - "execution_count": 18, - "metadata": { - "collapsed": false - }, + "execution_count": 9, + "metadata": {}, "outputs": [], "source": [ "def large_cont_sum(arr): \n", - " pass" + " s = []\n", + " maxval = -10000\n", + " for i, item in enumerate(arr):\n", + " if (i == 0):\n", + " s.append(item)\n", + " else:\n", + " s.append(max(s[i - 1] + item, item))\n", + " if(s[i] > maxval):\n", + " maxval = s[i]\n", + " return maxval" ] }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 13, "metadata": { - "collapsed": false + "collapsed": true }, + "outputs": [], + "source": [ + "def large_cont_sum(arr): \n", + " current_sum = arr[0]\n", + " maxval = current_sum\n", + " \n", + " for item in arr[1:]:\n", + " current_sum = max(current_sum + item, item)\n", + " if(current_sum > maxval):\n", + " maxval = current_sum\n", + " return maxval " + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, "outputs": [ { "data": { @@ -39,7 +63,7 @@ "29" ] }, - "execution_count": 25, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -65,10 +89,8 @@ }, { "cell_type": "code", - "execution_count": 28, - "metadata": { - "collapsed": false - }, + "execution_count": 15, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -86,7 +108,7 @@ " assert_equal(sol([1,2,-1,3,4,-1]),9)\n", " assert_equal(sol([1,2,-1,3,4,10,10,-10,-1]),29)\n", " assert_equal(sol([-1,1]),1)\n", - " print 'ALL TEST CASES PASSED'\n", + " print('ALL TEST CASES PASSED')\n", " \n", "#Run Test\n", "t = LargeContTest()\n", @@ -103,23 +125,23 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.10" + "pygments_lexer": "ipython3", + "version": "3.6.2" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Array Sequences/Array Sequences Interview Questions/Array Sequence Interview Questions/Sentence Reversal.ipynb b/Array Sequences/Array Sequences Interview Questions/Array Sequence Interview Questions/Sentence Reversal.ipynb index e6cf296a..53b2a6a5 100644 --- a/Array Sequences/Array Sequences Interview Questions/Array Sequence Interview Questions/Sentence Reversal.ipynb +++ b/Array Sequences/Array Sequences Interview Questions/Array Sequence Interview Questions/Sentence Reversal.ipynb @@ -33,22 +33,71 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 41, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def rev_word(s):\n", - " pass" + " stack = []\n", + " word = \"\"\n", + " for ch in s:\n", + " if ch == \" \":\n", + " stack.append(word) \n", + " word = \"\"\n", + " continue\n", + " word += ch\n", + " \n", + " stack.append(word) \n", + " result = []\n", + " \n", + " while stack:\n", + " top = stack.pop()\n", + " if top != \"\":\n", + " result.append(top)\n", + " \n", + " return \" \".join(result)" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 53, "metadata": { - "collapsed": false + "collapsed": true }, + "outputs": [], + "source": [ + "def rev_word(s):\n", + " return \" \".join(reversed(s.split()))" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": {}, + "outputs": [], + "source": [ + "def rev_word(s):\n", + " stack = []\n", + " idx = 0\n", + " length = len(s)\n", + " \n", + " while(idx < length):\n", + " if(s[idx] != \" \"):\n", + " beg = idx\n", + " while(idx < length and s[idx] != \" \"):\n", + " idx += 1\n", + " stack.append(s[beg:idx])\n", + " idx += 1\n", + " \n", + " return \" \".join(reversed(stack)) " + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": {}, "outputs": [ { "data": { @@ -56,7 +105,7 @@ "'go? to ready you are John, Hi'" ] }, - "execution_count": 4, + "execution_count": 68, "metadata": {}, "output_type": "execute_result" } @@ -67,10 +116,8 @@ }, { "cell_type": "code", - "execution_count": 20, - "metadata": { - "collapsed": false - }, + "execution_count": 69, + "metadata": {}, "outputs": [ { "data": { @@ -78,7 +125,7 @@ "'before space'" ] }, - "execution_count": 20, + "execution_count": 69, "metadata": {}, "output_type": "execute_result" } @@ -103,10 +150,8 @@ }, { "cell_type": "code", - "execution_count": 24, - "metadata": { - "collapsed": false - }, + "execution_count": 70, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -130,7 +175,7 @@ " assert_equal(sol('space after '),'after space')\n", " assert_equal(sol(' Hello John how are you '),'you are how John Hello')\n", " assert_equal(sol('1'),'1')\n", - " print \"ALL TEST CASES PASSED\"\n", + " print(\"ALL TEST CASES PASSED\")\n", " \n", "# Run and test\n", "t = ReversalTest()\n", @@ -147,23 +192,23 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.10" + "pygments_lexer": "ipython3", + "version": "3.6.2" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Array Sequences/Array Sequences Interview Questions/Array Sequence Interview Questions/String Compression .ipynb b/Array Sequences/Array Sequences Interview Questions/Array Sequence Interview Questions/String Compression .ipynb index e8c7d5f4..09bb98a8 100644 --- a/Array Sequences/Array Sequences Interview Questions/Array Sequence Interview Questions/String Compression .ipynb +++ b/Array Sequences/Array Sequences Interview Questions/Array Sequence Interview Questions/String Compression .ipynb @@ -23,22 +23,30 @@ }, { "cell_type": "code", - "execution_count": 65, + "execution_count": 10, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def compress(s):\n", - " pass" + " idx = 0\n", + " length = len(s)\n", + " result = \"\"\n", + " while(idx < length):\n", + " beg = idx\n", + " while(idx+1 < length and s[idx] == s[idx+1]):\n", + " idx += 1\n", + " l = idx - beg + 1\n", + " result += (s[beg] + str(l))\n", + " idx += 1\n", + " return result " ] }, { "cell_type": "code", - "execution_count": 66, - "metadata": { - "collapsed": false - }, + "execution_count": 11, + "metadata": {}, "outputs": [ { "data": { @@ -46,7 +54,7 @@ "'A5B4C4'" ] }, - "execution_count": 66, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -64,10 +72,8 @@ }, { "cell_type": "code", - "execution_count": 62, - "metadata": { - "collapsed": false - }, + "execution_count": 12, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -89,7 +95,7 @@ " assert_equal(sol(''), '')\n", " assert_equal(sol('AABBCC'), 'A2B2C2')\n", " assert_equal(sol('AAABCCDDDDD'), 'A3B1C2D5')\n", - " print 'ALL TEST CASES PASSED'\n", + " print('ALL TEST CASES PASSED')\n", "\n", "# Run Tests\n", "t = TestCompress()\n", @@ -113,16 +119,16 @@ "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.10" + "pygments_lexer": "ipython3", + "version": "3.6.2" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Array Sequences/Array Sequences Interview Questions/Array Sequence Interview Questions/Unique Characters in String.ipynb b/Array Sequences/Array Sequences Interview Questions/Array Sequence Interview Questions/Unique Characters in String.ipynb index 9659d2bf..6c1851e1 100644 --- a/Array Sequences/Array Sequences Interview Questions/Array Sequence Interview Questions/Unique Characters in String.ipynb +++ b/Array Sequences/Array Sequences Interview Questions/Array Sequence Interview Questions/Unique Characters in String.ipynb @@ -20,14 +20,32 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def uni_char(s):\n", - " pass" + " myhash = [0] * 26\n", + " for ch in s:\n", + " idx = ord(ch) - ord('a')\n", + " if(myhash[idx]):\n", + " return False\n", + " myhash[idx] += 1\n", + " return True " + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def uni_char(s):\n", + " return len(s) == len(set(s))" ] }, { @@ -39,10 +57,8 @@ }, { "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false - }, + "execution_count": 7, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -65,7 +81,7 @@ " assert_equal(sol(''), True)\n", " assert_equal(sol('goo'), False)\n", " assert_equal(sol('abcdefg'), True)\n", - " print 'ALL TEST CASES PASSED'\n", + " print('ALL TEST CASES PASSED')\n", " \n", "# Run Tests\n", "t = TestUnique()\n", @@ -89,16 +105,16 @@ "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.10" + "pygments_lexer": "ipython3", + "version": "3.6.2" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Array Sequences/Dynamic Array Exercise.ipynb b/Array Sequences/Dynamic Array Exercise.ipynb index 2b484bd7..e16dfd3f 100644 --- a/Array Sequences/Dynamic Array Exercise.ipynb +++ b/Array Sequences/Dynamic Array Exercise.ipynb @@ -96,8 +96,10 @@ }, { "cell_type": "code", - "execution_count": 43, - "metadata": {}, + "execution_count": 1, + "metadata": { + "collapsed": true + }, "outputs": [], "source": [ "import ctypes\n", @@ -159,8 +161,10 @@ }, { "cell_type": "code", - "execution_count": 44, - "metadata": {}, + "execution_count": 2, + "metadata": { + "collapsed": true + }, "outputs": [], "source": [ "# Instantiate\n", @@ -169,8 +173,10 @@ }, { "cell_type": "code", - "execution_count": 45, - "metadata": {}, + "execution_count": 3, + "metadata": { + "collapsed": true + }, "outputs": [], "source": [ "# Append new element\n", @@ -179,7 +185,7 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -188,7 +194,7 @@ "1" ] }, - "execution_count": 46, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -200,8 +206,10 @@ }, { "cell_type": "code", - "execution_count": 47, - "metadata": {}, + "execution_count": 5, + "metadata": { + "collapsed": true + }, "outputs": [], "source": [ "# Append new element\n", @@ -210,7 +218,7 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -219,7 +227,7 @@ "2" ] }, - "execution_count": 48, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -231,7 +239,7 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -240,7 +248,7 @@ "1" ] }, - "execution_count": 50, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -252,7 +260,7 @@ }, { "cell_type": "code", - "execution_count": 51, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -261,7 +269,7 @@ "2" ] }, - "execution_count": 51, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } diff --git a/Array Sequences/Dynamic Arrays.ipynb b/Array Sequences/Dynamic Arrays.ipynb index 97ec9d25..e37caffb 100644 --- a/Array Sequences/Dynamic Arrays.ipynb +++ b/Array Sequences/Dynamic Arrays.ipynb @@ -22,23 +22,23 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.10" + "pygments_lexer": "ipython3", + "version": "3.6.2" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Graphs/Implementation of Adjacency List.ipynb b/Graphs/Implementation of Adjacency List.ipynb index e415ad5e..934af919 100644 --- a/Graphs/Implementation of Adjacency List.ipynb +++ b/Graphs/Implementation of Adjacency List.ipynb @@ -14,7 +14,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 1, "metadata": { "collapsed": true }, @@ -60,7 +60,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 2, "metadata": { "collapsed": true }, @@ -83,9 +83,7 @@ " else:\n", " return None\n", "\n", - " def __contains__(self,n):\n", - " return n in self.vertList\n", - "\n", + " # f: from, t: to \n", " def addEdge(self,f,t,cost=0):\n", " if f not in self.vertList:\n", " nv = self.addVertex(f)\n", @@ -97,7 +95,10 @@ " return self.vertList.keys()\n", "\n", " def __iter__(self):\n", - " return iter(self.vertList.values())" + " return iter(self.vertList.values())\n", + " \n", + " def __contains__(self,n):\n", + " return n in self.vertList\n" ] }, { @@ -109,8 +110,10 @@ }, { "cell_type": "code", - "execution_count": 5, - "metadata": {}, + "execution_count": 3, + "metadata": { + "collapsed": true + }, "outputs": [], "source": [ "g = Graph()\n", @@ -120,21 +123,21 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "{0: <__main__.Vertex instance at 0x10476b680>,\n", - " 1: <__main__.Vertex instance at 0x104cce5f0>,\n", - " 2: <__main__.Vertex instance at 0x10395d950>,\n", - " 3: <__main__.Vertex instance at 0x1039c00e0>,\n", - " 4: <__main__.Vertex instance at 0x1039c4e60>,\n", - " 5: <__main__.Vertex instance at 0x1039c45f0>}" + "{0: <__main__.Vertex at 0x7f32c05e9320>,\n", + " 1: <__main__.Vertex at 0x7f32c05e93c8>,\n", + " 2: <__main__.Vertex at 0x7f32c05e9400>,\n", + " 3: <__main__.Vertex at 0x7f32c05e9438>,\n", + " 4: <__main__.Vertex at 0x7f32c05e9470>,\n", + " 5: <__main__.Vertex at 0x7f32c05e94a8>}" ] }, - "execution_count": 6, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -145,7 +148,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 5, "metadata": { "collapsed": true }, @@ -156,7 +159,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -164,27 +167,27 @@ "output_type": "stream", "text": [ "0 connectedTo: [1]\n", - "[<__main__.Vertex instance at 0x104cce5f0>]\n", + "dict_keys([<__main__.Vertex object at 0x7f32c05e93c8>])\n", "\n", "\n", "1 connectedTo: []\n", - "[]\n", + "dict_keys([])\n", "\n", "\n", "2 connectedTo: []\n", - "[]\n", + "dict_keys([])\n", "\n", "\n", "3 connectedTo: []\n", - "[]\n", + "dict_keys([])\n", "\n", "\n", "4 connectedTo: []\n", - "[]\n", + "dict_keys([])\n", "\n", "\n", "5 connectedTo: []\n", - "[]\n", + "dict_keys([])\n", "\n", "\n" ] @@ -192,9 +195,9 @@ ], "source": [ "for vertex in g:\n", - " print vertex\n", - " print vertex.getConnections()\n", - " print '\\n'" + " print(vertex)\n", + " print(vertex.getConnections())\n", + " print('\\n')" ] }, { @@ -221,7 +224,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.3" + "version": "3.6.2" } }, "nbformat": 4, diff --git a/Graphs/Implementation of Breadth First Search.ipynb b/Graphs/Implementation of Breadth First Search.ipynb index 185b0183..3215fe6a 100644 --- a/Graphs/Implementation of Breadth First Search.ipynb +++ b/Graphs/Implementation of Breadth First Search.ipynb @@ -16,7 +16,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 9, "metadata": { "collapsed": true }, @@ -40,7 +40,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -49,14 +49,15 @@ "{'A', 'B', 'C', 'D', 'E', 'F'}" ] }, - "execution_count": 2, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def bfs(graph, start):\n", - " visited, queue = set(), [start]\n", + " visited = set()\n", + " queue = [start]\n", " while queue:\n", " vertex = queue.pop(0)\n", " if vertex not in visited:\n", @@ -77,7 +78,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -86,7 +87,7 @@ "[['A', 'C', 'F'], ['A', 'B', 'E', 'F']]" ] }, - "execution_count": 3, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -114,7 +115,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -123,7 +124,7 @@ "['A', 'C', 'F']" ] }, - "execution_count": 4, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -168,7 +169,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.3" + "version": "3.6.2" } }, "nbformat": 4, diff --git a/Graphs/Implementation of Depth First Search.ipynb b/Graphs/Implementation of Depth First Search.ipynb index c111e89d..b3bd5a21 100644 --- a/Graphs/Implementation of Depth First Search.ipynb +++ b/Graphs/Implementation of Depth First Search.ipynb @@ -15,7 +15,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 2, "metadata": { "collapsed": true }, @@ -40,7 +40,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -49,14 +49,15 @@ "{'A', 'B', 'C', 'D', 'E', 'F'}" ] }, - "execution_count": 15, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def dfs(graph, start):\n", - " visited, stack = set(), [start]\n", + " visited = set()\n", + " stack = [start]\n", " while stack:\n", " vertex = stack.pop()\n", " if vertex not in visited:\n", @@ -76,7 +77,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -85,7 +86,7 @@ "{'A', 'B', 'C', 'D', 'E', 'F'}" ] }, - "execution_count": 12, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -170,7 +171,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.3" + "version": "3.6.2" } }, "nbformat": 4, diff --git a/Graphs/Implementation of Graph Overview.ipynb b/Graphs/Implementation of Graph Overview.ipynb index 3363f9a8..a935f3d0 100644 --- a/Graphs/Implementation of Graph Overview.ipynb +++ b/Graphs/Implementation of Graph Overview.ipynb @@ -18,7 +18,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 2, "metadata": { "collapsed": true }, @@ -32,6 +32,17 @@ " visiting = 3 #Gray" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "!pip isntall enum34 # !: command line promp" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -41,7 +52,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 3, "metadata": { "collapsed": true }, @@ -69,7 +80,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 4, "metadata": { "collapsed": true }, @@ -95,8 +106,10 @@ }, { "cell_type": "code", - "execution_count": 14, - "metadata": {}, + "execution_count": 5, + "metadata": { + "collapsed": true + }, "outputs": [], "source": [ "g = Graph()\n", @@ -105,22 +118,45 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "OrderedDict([(0, <__main__.Node at 0x7fcd5c5c3f60>),\n", + " (1, <__main__.Node at 0x7fcd5c5c36a0>)])" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "g.nodes" + ] + }, + { + "cell_type": "code", + "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "OrderedDict([(0, <__main__.Node instance at 0x103a761b8>),\n", - " (1, <__main__.Node instance at 0x104dfef80>)])" + "OrderedDict([(0, <__main__.Node at 0x7fcd5c5c3f60>),\n", + " (1, <__main__.Node at 0x7fcd5c5c36a0>),\n", + " (2, <__main__.Node at 0x7fcd5c4d9ef0>)])" ] }, - "execution_count": 15, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ + "g.add_edge(1, 2, 3)\n", "g.nodes" ] }, @@ -148,7 +184,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.3" + "version": "3.6.2" } }, "nbformat": 4, diff --git a/Graphs/Word Ladder Example Problem.ipynb b/Graphs/Word Ladder Example Problem.ipynb index a90aefdd..03d25d29 100644 --- a/Graphs/Word Ladder Example Problem.ipynb +++ b/Graphs/Word Ladder Example Problem.ipynb @@ -13,7 +13,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 5, "metadata": { "collapsed": true }, @@ -42,7 +42,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 6, "metadata": { "collapsed": true }, @@ -91,7 +91,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 18, "metadata": { "collapsed": true }, @@ -104,15 +104,18 @@ " wfile = open(wordFile,'r')\n", " # create buckets of words that differ by one letter\n", " for line in wfile:\n", - " print line\n", + " #print(line)\n", " word = line[:-1]\n", - " print word\n", + " print(word)\n", " for i in range(len(word)):\n", " bucket = word[:i] + '_' + word[i+1:]\n", + " #print(bucket)\n", " if bucket in d:\n", " d[bucket].append(word)\n", " else:\n", " d[bucket] = [word]\n", + " print(\"\\n\") \n", + " print(d.keyes())\n", " # add vertices and edges for words in the same bucket\n", " for bucket in d.keys():\n", " for word1 in d[bucket]:\n", @@ -122,6 +125,41 @@ " return g" ] }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "pope\n", + "\n", + "\n", + "rope\n", + "\n", + "\n", + "sage\n", + "\n", + "\n", + "best\n", + "\n", + "\n", + "ripe\n", + "\n", + "\n", + "pip\n", + "\n", + "\n", + "dict_values([['pope', 'rope'], ['pope'], ['pope'], ['pope'], ['rope', 'ripe'], ['rope'], ['rope'], ['sage'], ['sage'], ['sage'], ['sage'], ['best'], ['best'], ['best'], ['best'], ['ripe'], ['ripe'], ['ripe'], ['pip'], ['pip'], ['pip']])\n" + ] + } + ], + "source": [ + "g = buildGraph(\"words.txt\")\n" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -132,23 +170,23 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.11" + "pygments_lexer": "ipython3", + "version": "3.6.2" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Linked Lists/Doubly Linked List Implementation.ipynb b/Linked Lists/Doubly Linked List Implementation.ipynb index d409f9d3..91b1e551 100644 --- a/Linked Lists/Doubly Linked List Implementation.ipynb +++ b/Linked Lists/Doubly Linked List Implementation.ipynb @@ -96,16 +96,16 @@ "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.10" + "pygments_lexer": "ipython3", + "version": "3.6.2" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Linked Lists/Linked Lists Interview Problems/Linked List Interview Problems /Implement a Singly Linked List.ipynb b/Linked Lists/Linked Lists Interview Problems/Linked List Interview Problems /Implement a Singly Linked List.ipynb index 92b84693..94d71903 100644 --- a/Linked Lists/Linked Lists Interview Problems/Linked List Interview Problems /Implement a Singly Linked List.ipynb +++ b/Linked Lists/Linked Lists Interview Problems/Linked List Interview Problems /Implement a Singly Linked List.ipynb @@ -18,7 +18,9 @@ "outputs": [], "source": [ "class Node(object):\n", - " pass" + " def __init__(self, value):\n", + " self.value = value\n", + " self.nextnode = None" ] }, { @@ -53,16 +55,16 @@ "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.11" + "pygments_lexer": "ipython3", + "version": "3.6.2" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Linked Lists/Linked Lists Interview Problems/Linked List Interview Problems /Linked List Nth to Last Node .ipynb b/Linked Lists/Linked Lists Interview Problems/Linked List Interview Problems /Linked List Nth to Last Node .ipynb index de16594d..f7a8abd1 100644 --- a/Linked Lists/Linked Lists Interview Problems/Linked List Interview Problems /Linked List Nth to Last Node .ipynb +++ b/Linked Lists/Linked Lists Interview Problems/Linked List Interview Problems /Linked List Nth to Last Node .ipynb @@ -34,11 +34,21 @@ }, { "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'nth_to_last_node' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 11\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 12\u001b[0m \u001b[0;31m# This would return the node d with a value of 4, because its the 2nd to last node.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 13\u001b[0;31m \u001b[0mtarget_node\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnth_to_last_node\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0ma\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mNameError\u001b[0m: name 'nth_to_last_node' is not defined" + ] + } + ], "source": [ "a = Node(1)\n", "b = Node(2)\n", @@ -58,9 +68,7 @@ { "cell_type": "code", "execution_count": 7, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -87,15 +95,29 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 8, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def nth_to_last_node(n, head):\n", - "\n", - " pass" + " if(head is None):\n", + " return None\n", + " \n", + " ptr1 = head\n", + " ptr2 = head\n", + " \n", + " for _ in range(n-1):\n", + " ptr2 = ptr2.nextnode\n", + " if(ptr2 is None):\n", + " raise LookupError(\"n larger than list size\")\n", + " \n", + " while(ptr2.nextnode):\n", + " ptr1 = ptr1.nextnode\n", + " ptr2 = ptr2.nextnode\n", + " \n", + " return ptr1 " ] }, { @@ -107,10 +129,17 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": { - "collapsed": false + "collapsed": true }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -147,7 +176,7 @@ " def test(self,sol):\n", " \n", " assert_equal(sol(2,a),d)\n", - " print 'ALL TEST CASES PASSED'\n", + " print('ALL TEST CASES PASSED')\n", " \n", "# Run tests\n", "t = TestNLast()\n", @@ -171,16 +200,16 @@ "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.11" + "pygments_lexer": "ipython3", + "version": "3.6.2" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Linked Lists/Linked Lists Interview Problems/Linked List Interview Problems /Linked List Reversal .ipynb b/Linked Lists/Linked Lists Interview Problems/Linked List Interview Problems /Linked List Reversal .ipynb index d6d333eb..3b701e5a 100644 --- a/Linked Lists/Linked Lists Interview Problems/Linked List Interview Problems /Linked List Reversal .ipynb +++ b/Linked Lists/Linked Lists Interview Problems/Linked List Interview Problems /Linked List Reversal .ipynb @@ -15,7 +15,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 1, "metadata": { "collapsed": true }, @@ -40,15 +40,28 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def reverse(head):\n", + " if(head == None) or (head.nextnode == None):\n", + " return head\n", + " curr = head\n", + " nextnode = head.nextnode\n", + " curr.nextnode = None\n", " \n", - " pass" + " while nextnode:\n", + " temp = nextnode.nextnode\n", + " nextnode.nextnode = curr\n", + " curr = nextnode\n", + " nextnode = temp\n", + " \n", + " return curr\n", + " \n", + " " ] }, { @@ -64,7 +77,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 3, "metadata": { "collapsed": true }, @@ -91,10 +104,8 @@ }, { "cell_type": "code", - "execution_count": 44, - "metadata": { - "collapsed": false - }, + "execution_count": 5, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -107,17 +118,15 @@ } ], "source": [ - "print a.nextnode.value\n", - "print b.nextnode.value\n", - "print c.nextnode.value" + "print(a.nextnode.value)\n", + "print(b.nextnode.value)\n", + "print(c.nextnode.value)" ] }, { "cell_type": "code", - "execution_count": 45, - "metadata": { - "collapsed": false - }, + "execution_count": 6, + "metadata": {}, "outputs": [ { "ename": "AttributeError", @@ -126,7 +135,7 @@ "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0md\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnextnode\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0md\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnextnode\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mAttributeError\u001b[0m: 'NoneType' object has no attribute 'value'" ] } @@ -144,18 +153,16 @@ }, { "cell_type": "code", - "execution_count": 46, - "metadata": { - "collapsed": false - }, + "execution_count": 7, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "<__main__.Node at 0x104bd7dd0>" + "<__main__.Node at 0x7fc8b843d198>" ] }, - "execution_count": 46, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -166,10 +173,8 @@ }, { "cell_type": "code", - "execution_count": 49, - "metadata": { - "collapsed": false - }, + "execution_count": 8, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -182,27 +187,22 @@ } ], "source": [ - "print d.nextnode.value\n", - "print c.nextnode.value\n", - "print b.nextnode.value" + "print(d.nextnode.value)\n", + "print(c.nextnode.value)\n", + "print(b.nextnode.value)" ] }, { "cell_type": "code", - "execution_count": 50, - "metadata": { - "collapsed": false - }, + "execution_count": 9, + "metadata": {}, "outputs": [ { - "ename": "AttributeError", - "evalue": "'NoneType' object has no attribute 'value'", + "ename": "SyntaxError", + "evalue": "Missing parentheses in call to 'print' (, line 1)", "output_type": "error", "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mprint\u001b[0m \u001b[0ma\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnextnode\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalue\u001b[0m \u001b[0;31m# This will give an error since it now points to None\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;31mAttributeError\u001b[0m: 'NoneType' object has no attribute 'value'" + "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m print a.nextnode.value # This will give an error since it now points to None\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m Missing parentheses in call to 'print'\n" ] } ], @@ -218,6 +218,15 @@ "\n", "## Good Job!" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] } ], "metadata": { @@ -229,16 +238,16 @@ "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.11" + "pygments_lexer": "ipython3", + "version": "3.6.2" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Linked Lists/Linked Lists Interview Problems/Linked List Interview Problems /Singly Linked List Cycle Check.ipynb b/Linked Lists/Linked Lists Interview Problems/Linked List Interview Problems /Singly Linked List Cycle Check.ipynb index 8c41dde7..9b6df446 100644 --- a/Linked Lists/Linked Lists Interview Problems/Linked List Interview Problems /Singly Linked List Cycle Check.ipynb +++ b/Linked Lists/Linked Lists Interview Problems/Linked List Interview Problems /Singly Linked List Cycle Check.ipynb @@ -17,7 +17,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 6, "metadata": { "collapsed": true }, @@ -42,15 +42,26 @@ }, { "cell_type": "code", - "execution_count": 8, - "metadata": { - "collapsed": true - }, + "execution_count": 21, + "metadata": {}, "outputs": [], "source": [ "def cycle_check(node):\n", "\n", - " pass #Your function should return a boolean" + " if(node is None) or (node.nextnode is None):\n", + " return False\n", + " #Your function should return a boolean\n", + " ptr1 = node\n", + " ptr2 = node\n", + " \n", + " while(ptr2 is not None) and (ptr2.nextnode is not None):\n", + " ptr1 = ptr1.nextnode\n", + " ptr2 = ptr2.nextnode.nextnode\n", + " \n", + " if(ptr1 == ptr2):\n", + " return True\n", + " \n", + " return False" ] }, { @@ -62,10 +73,8 @@ }, { "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false - }, + "execution_count": 22, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -107,7 +116,7 @@ " assert_equal(sol(a),True)\n", " assert_equal(sol(x),False)\n", " \n", - " print \"ALL TEST CASES PASSED\"\n", + " print(\"ALL TEST CASES PASSED\")\n", " \n", "# Run Tests\n", "\n", @@ -132,16 +141,16 @@ "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.11" + "pygments_lexer": "ipython3", + "version": "3.6.2" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Recursion/Memoization.ipynb b/Recursion/Memoization.ipynb index 8921ed05..f501ba05 100644 --- a/Recursion/Memoization.ipynb +++ b/Recursion/Memoization.ipynb @@ -57,6 +57,115 @@ "factorial(4)" ] }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def factorial_rec(k):\n", + " if(k == 0):\n", + " return 1\n", + " return k * factorial_rec(k - 1)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "622 ns ± 17.5 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)\n" + ] + } + ], + "source": [ + "%timeit factorial_rec(5)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "120" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "factorial_rec(5)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "mydict = {}\n", + "\n", + "def factorial_memo(k):\n", + " if(k == 0):\n", + " return 1\n", + " if(k in mydict):\n", + " return mydict[k]\n", + " else:\n", + " mydict[k] = k * factorial_memo(k - 1)\n", + " return mydict[k] \n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "120" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "factorial_memo(5)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "130 ns ± 0.168 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)\n" + ] + } + ], + "source": [ + "%timeit factorial_memo(5)" + ] + }, { "cell_type": "markdown", "metadata": {}, diff --git a/Recursion/Recursion Homework Example Problems - SOLUTIONS.ipynb b/Recursion/Recursion Homework Example Problems - SOLUTIONS.ipynb index f7bafd8e..c13a8e06 100644 --- a/Recursion/Recursion Homework Example Problems - SOLUTIONS.ipynb +++ b/Recursion/Recursion Homework Example Problems - SOLUTIONS.ipynb @@ -47,9 +47,7 @@ { "cell_type": "code", "execution_count": 8, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -98,9 +96,7 @@ { "cell_type": "code", "execution_count": 4, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -127,9 +123,7 @@ { "cell_type": "code", "execution_count": 13, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -150,9 +144,7 @@ { "cell_type": "code", "execution_count": 14, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -195,9 +187,7 @@ { "cell_type": "code", "execution_count": 32, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -217,9 +207,7 @@ { "cell_type": "code", "execution_count": 33, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -239,9 +227,7 @@ { "cell_type": "code", "execution_count": 34, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -261,9 +247,7 @@ { "cell_type": "code", "execution_count": 24, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "def word_split(phrase,list_of_words, output = None):\n", @@ -312,16 +296,16 @@ "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.10" + "pygments_lexer": "ipython3", + "version": "3.6.2" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Recursion/Recursion Homework Example Problems.ipynb b/Recursion/Recursion Homework Example Problems.ipynb index ebe52213..928ef6c2 100644 --- a/Recursion/Recursion Homework Example Problems.ipynb +++ b/Recursion/Recursion Homework Example Problems.ipynb @@ -26,23 +26,22 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 5, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def rec_sum(n):\n", - " \n", - " pass" + " if(n == 0):\n", + " return 0\n", + " return n + rec_sum(n-1) " ] }, { "cell_type": "code", - "execution_count": 8, - "metadata": { - "collapsed": false - }, + "execution_count": 6, + "metadata": {}, "outputs": [ { "data": { @@ -50,7 +49,7 @@ "10" ] }, - "execution_count": 8, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -72,22 +71,24 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 9, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def sum_func(n):\n", - " pass" + " if(n == 0):\n", + " return 0\n", + " rhd = n % 10\n", + " n = int(n / 10)\n", + " return rhd + sum_func(n)" ] }, { "cell_type": "code", - "execution_count": 4, - "metadata": { - "collapsed": false - }, + "execution_count": 10, + "metadata": {}, "outputs": [ { "data": { @@ -95,7 +96,7 @@ "10" ] }, - "execution_count": 4, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -114,9 +115,7 @@ { "cell_type": "code", "execution_count": 13, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -137,9 +136,7 @@ { "cell_type": "code", "execution_count": 14, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -182,9 +179,7 @@ { "cell_type": "code", "execution_count": 32, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -204,9 +199,7 @@ { "cell_type": "code", "execution_count": 33, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -226,9 +219,7 @@ { "cell_type": "code", "execution_count": 34, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -247,14 +238,191 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 31, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def word_split(phrase,list_of_words, output = None):\n", + " result = []\n", + " helper(\"\", phrase, list_of_words, result)\n", + " return result\n", + "\n", + "# does not work because string is not mutable\n", + "def helper(word, phrase, list_of_words, result):\n", + " if(phrase == \"\"):\n", + " return\n", + " word += phrase[0]\n", + " if(word in list_of_words):\n", + " result.append(word)\n", + " word = \"\"\n", + " helper(word, phrase[1:-1], list_of_words, result) \n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": {}, + "outputs": [], + "source": [ + "def word_split(phrase,list_of_words, output = None):\n", + " result = []\n", + " beg = 0\n", + " end = 0\n", + " while(end < len(phrase)):\n", + " word = phrase[beg:end+1]\n", + " if(word in list_of_words):\n", + " result.append(word)\n", + " beg = end + 1\n", + " end += 1\n", + " print(result) \n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 68, "metadata": { - "collapsed": false + "collapsed": true }, "outputs": [], "source": [ "def word_split(phrase,list_of_words, output = None):\n", - " pass " + " if(output is None):\n", + " output = []\n", + "\n", + " for word in list_of_words:\n", + " if phrase.startswith(word):\n", + " output.append(word)\n", + " return word_split(phrase[len(word):], list_of_words, output)\n", + " \n", + " return output " + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "word_split('themanran',['clown','ran','man'])" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['man', 'ran']" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "word_split('manranthe',['clown','ran','man'])" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['i', 'love', 'dogs', 'John']" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "word_split('ilovedogsJohn',['i','am','a','dogs','lover','love','John'])" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['the', 'man', 'ran']" + ] + }, + "execution_count": 67, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "word_split('themanran',['the','ran','man'])" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "None\n", + "ali\n" + ] + } + ], + "source": [ + "def change(word):\n", + " word += \"amir\"\n", + "\n", + "word = \"ali\" \n", + "print(change(word))\n", + "print(word)" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['ali', 'amir']\n" + ] + } + ], + "source": [ + "def change(mylist):\n", + " mylist.append(\"amir\")\n", + "mylist = [\"ali\"]\n", + "change(mylist)\n", + "print(mylist)" ] }, { @@ -276,16 +444,16 @@ "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.10" + "pygments_lexer": "ipython3", + "version": "3.6.2" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Recursion/Recursion Interview Problems/Recursion Problems/Recursion Problem 1 - Reverse String .ipynb b/Recursion/Recursion Interview Problems/Recursion Problems/Recursion Problem 1 - Reverse String .ipynb index 4d4308f6..db77032d 100644 --- a/Recursion/Recursion Interview Problems/Recursion Problems/Recursion Problem 1 - Reverse String .ipynb +++ b/Recursion/Recursion Interview Problems/Recursion Problems/Recursion Problem 1 - Reverse String .ipynb @@ -17,23 +17,24 @@ }, { "cell_type": "code", - "execution_count": 7, - "metadata": { - "collapsed": false - }, + "execution_count": 1, + "metadata": {}, "outputs": [], "source": [ "def reverse(s):\n", + " if s == \"\":\n", + " return s\n", " \n", - " pass" + " first = s[0]\n", + " rest = reverse(s[1:])\n", + " \n", + " return rest + first" ] }, { "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false - }, + "execution_count": 2, + "metadata": {}, "outputs": [ { "data": { @@ -41,7 +42,7 @@ "'dlrow olleh'" ] }, - "execution_count": 10, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } @@ -67,10 +68,8 @@ }, { "cell_type": "code", - "execution_count": 13, - "metadata": { - "collapsed": false - }, + "execution_count": 4, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -94,7 +93,7 @@ " assert_equal(solution('hello world'),'dlrow olleh')\n", " assert_equal(solution('123456789'),'987654321')\n", " \n", - " print 'PASSED ALL TEST CASES!'\n", + " print('PASSED ALL TEST CASES!')\n", " \n", "# Run Tests\n", "test = TestReverse()\n", @@ -118,16 +117,16 @@ "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.10" + "pygments_lexer": "ipython3", + "version": "3.6.2" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Recursion/Recursion Interview Problems/Recursion Problems/Recursion Problem 2 - String Permutation.ipynb b/Recursion/Recursion Interview Problems/Recursion Problems/Recursion Problem 2 - String Permutation.ipynb index e2585c12..b57655a7 100644 --- a/Recursion/Recursion Interview Problems/Recursion Problems/Recursion Problem 2 - String Permutation.ipynb +++ b/Recursion/Recursion Interview Problems/Recursion Problems/Recursion Problem 2 - String Permutation.ipynb @@ -24,7 +24,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 17, "metadata": { "collapsed": true }, @@ -32,15 +32,26 @@ "source": [ "def permute(s):\n", " \n", - " pass" + " result = []\n", + " \n", + " if (len(s) == 1):\n", + " result = [s]\n", + " #result.append(s)\n", + " \n", + " for i, let in enumerate(s):\n", + " rest = s[:i] + s[i+1:]\n", + " perms = permute(rest)\n", + " for perm in perms:\n", + " result \n", + " result.append(let + perm)\n", + " \n", + " return result" ] }, { "cell_type": "code", - "execution_count": 24, - "metadata": { - "collapsed": false - }, + "execution_count": 18, + "metadata": {}, "outputs": [ { "data": { @@ -48,7 +59,7 @@ "['abc', 'acb', 'bac', 'bca', 'cab', 'cba']" ] }, - "execution_count": 24, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -67,10 +78,8 @@ }, { "cell_type": "code", - "execution_count": 25, - "metadata": { - "collapsed": false - }, + "execution_count": 19, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -94,7 +103,7 @@ " assert_equal(sorted(solution('abc')),sorted(['abc', 'acb', 'bac', 'bca', 'cab', 'cba']))\n", " assert_equal(sorted(solution('dog')),sorted(['dog', 'dgo', 'odg', 'ogd', 'gdo', 'god']) )\n", " \n", - " print 'All test cases passed.'\n", + " print('All test cases passed.')\n", " \n", "\n", "\n", @@ -113,23 +122,23 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.10" + "pygments_lexer": "ipython3", + "version": "3.6.2" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Recursion/Recursion Interview Problems/Recursion Problems/Recursion Problem 3 - Fibonacci Sequence.ipynb b/Recursion/Recursion Interview Problems/Recursion Problems/Recursion Problem 3 - Fibonacci Sequence.ipynb index e85c24d0..3433eff3 100644 --- a/Recursion/Recursion Interview Problems/Recursion Problems/Recursion Problem 3 - Fibonacci Sequence.ipynb +++ b/Recursion/Recursion Interview Problems/Recursion Problems/Recursion Problem 3 - Fibonacci Sequence.ipynb @@ -41,23 +41,20 @@ }, { "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false - }, + "execution_count": 18, + "metadata": {}, "outputs": [], "source": [ "def fib_rec(n):\n", - " \n", - " pass" + " if (n == 0) or (n == 1):\n", + " return n\n", + " return fib_rec(n - 1) + fib_rec(n - 2)" ] }, { "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": false - }, + "execution_count": 19, + "metadata": {}, "outputs": [ { "data": { @@ -65,7 +62,7 @@ "55" ] }, - "execution_count": 6, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -85,42 +82,82 @@ }, { "cell_type": "code", - "execution_count": 8, - "metadata": { - "collapsed": false - }, + "execution_count": 41, + "metadata": {}, "outputs": [], "source": [ "# Instantiate Cache information\n", - "n = 10\n", + "n = 23\n", "cache = [None] * (n + 1)\n", "\n", - "\n", "def fib_dyn(n):\n", + " if(n == 0) or (n == 1):\n", + " cache[n] = n\n", + " return n\n", + " if(cache[n] is not None):\n", + " return cache[n]\n", + " \n", + " cache[n] = fib_dyn(n - 1) + fib_dyn(n - 2)\n", " \n", - " pass" + " return cache[n]" ] }, { "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false - }, + "execution_count": 42, + "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "55" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + "28657\n", + "[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657]\n" + ] } ], "source": [ - "fib_dyn(10)" + "print(fib_dyn(23))\n", + "print(cache)" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [], + "source": [ + "def fib_dyn(n):\n", + " cached = [None] * (n + 1)\n", + " return helper(n, cached)\n", + "\n", + "def helper(n, cached):\n", + " if(n == 0) or (n == 1):\n", + " cached[n] = n\n", + " return n\n", + " if (cached[n] is not None):\n", + " return cached[n]\n", + " \n", + " cached[n.appendn(]helper(n - 1, cached) + helper(n - 2, cached))\n", + " \n", + " return cached[n]" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2\n" + ] + } + ], + "source": [ + "print(fib_dyn(23))" ] }, { @@ -134,23 +171,26 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 12, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def fib_iter(n):\n", - " \n", - " pass" + " fib = [0, 1]\n", + " idx = 0\n", + " for _ in range(n):\n", + " fib[idx % 2] += fib[(idx + 1) % 2]\n", + " idx = (idx + 1) % 2\n", + " return fib[idx] \n", + " " ] }, { "cell_type": "code", - "execution_count": 14, - "metadata": { - "collapsed": false - }, + "execution_count": 13, + "metadata": {}, "outputs": [ { "data": { @@ -158,7 +198,7 @@ "28657" ] }, - "execution_count": 14, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -167,6 +207,29 @@ "fib_iter(23)" ] }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "89\n" + ] + } + ], + "source": [ + "def fib(n):\n", + " a,b = 1,1\n", + " for i in range(n-1):\n", + " a,b = b,a+b\n", + " return a\n", + "\n", + "print(fib(11))" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -178,10 +241,8 @@ }, { "cell_type": "code", - "execution_count": 19, - "metadata": { - "collapsed": false - }, + "execution_count": 14, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -205,13 +266,13 @@ " assert_equal(solution(10),55)\n", " assert_equal(solution(1),1)\n", " assert_equal(solution(23),28657)\n", - " print 'Passed all tests.'\n", + " print('Passed all tests.')\n", "# UNCOMMENT FOR CORRESPONDING FUNCTION\n", "t = TestFib()\n", "\n", - "t.test(fib_rec)\n", + "#t.test(fib_rec)\n", "#t.test(fib_dyn) # Note, will need to reset cache size for each test!\n", - "#t.test(fib_iter)" + "t.test(fib_iter)" ] }, { @@ -226,23 +287,23 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.10" + "pygments_lexer": "ipython3", + "version": "3.6.2" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Recursion/Recursion Interview Problems/Recursion Problems/Recursion Problem 4 - Coin Change.ipynb b/Recursion/Recursion Interview Problems/Recursion Problems/Recursion Problem 4 - Coin Change.ipynb index f8785dfb..e3e8ad7c 100644 --- a/Recursion/Recursion Interview Problems/Recursion Problems/Recursion Problem 4 - Coin Change.ipynb +++ b/Recursion/Recursion Interview Problems/Recursion Problems/Recursion Problem 4 - Coin Change.ipynb @@ -39,23 +39,187 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 72, + "metadata": {}, + "outputs": [], + "source": [ + "# total number of possible ways\n", + "\n", + "def rec_coin(target,coins):\n", + " return helper(target, coins, 0)\n", + " \n", + "def helper(target, coins, m): \n", + " if target == 0:\n", + " return 1\n", + " if target < 0:\n", + " return 0 \n", + " if (target > 0) and (m == len(coins)):\n", + " return 0\n", + " \n", + " return helper(target - coins[m], coins, m) + helper(target, coins, m+1)\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3" + ] + }, + "execution_count": 73, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rec_coin(10,[1,5])" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "4" + ] + }, + "execution_count": 74, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rec_coin(10,[1,5,10])" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "73" + ] + }, + "execution_count": 75, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rec_coin(63,[1,5,10,25])" + ] + }, + { + "cell_type": "code", + "execution_count": 101, "metadata": { "collapsed": true }, "outputs": [], "source": [ + "#fewest number of coins\n", "def rec_coin(target,coins):\n", + "\n", + " res = target\n", + "\n", + " if target in coins:\n", + " return 1\n", + " \n", + " for item in coins:\n", + " if(item < target):\n", + " count = 1 + rec_coin(target - item, coins)\n", + " \n", + " if(count < res):\n", + " res = count\n", " \n", - " pass" + " return res" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 102, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 102, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rec_coin(15,[1,5,10])" + ] + }, + { + "cell_type": "code", + "execution_count": 100, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "6" + ] + }, + "execution_count": 100, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rec_coin(63,[1,5,10,25])" + ] + }, + { + "cell_type": "code", + "execution_count": 124, "metadata": { - "collapsed": false + "collapsed": true }, + "outputs": [], + "source": [ + "def rec_coin_dyn(target, coins):\n", + " known_results = [0] * (target + 1)\n", + " return helper_dyn(target, coins, known_results)\n", + " \n", + "def helper_dyn(target, coins, known_results):\n", + " res = target\n", + " \n", + " if(target in coins):\n", + " known_results[target] = 1\n", + " return 1\n", + " \n", + " if known_results[target]:\n", + " return known_results[target]\n", + " \n", + " for item in [ c for c in coins if c <= target ]:\n", + " count = 1 + helper_dyn(target - item, coins, known_results)\n", + " if count < res:\n", + " res = count\n", + " known_results[target] = count\n", + " return res" + ] + }, + { + "cell_type": "code", + "execution_count": 125, + "metadata": {}, "outputs": [ { "data": { @@ -63,13 +227,15 @@ "2" ] }, - "execution_count": 3, + "execution_count": 125, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "rec_coin(10,[1,5])" + "coins = [1, 5, 10]\n", + "target = 15\n", + "rec_coin_dyn(target, coins)" ] }, { @@ -85,11 +251,17 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 126, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Passed all tests.\n" + ] + } + ], "source": [ "\"\"\"\n", "RUN THIS CELL TO TEST YOUR FUNCTION.\n", @@ -106,11 +278,11 @@ " assert_equal(solution(45,coins),3)\n", " assert_equal(solution(23,coins),5)\n", " assert_equal(solution(74,coins),8)\n", - " print 'Passed all tests.'\n", + " print('Passed all tests.')\n", "# Run Test\n", "\n", "test = TestCoins()\n", - "test.check(rec_coin)" + "test.check(rec_coin_dyn)" ] }, { @@ -132,16 +304,16 @@ "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.10" + "pygments_lexer": "ipython3", + "version": "3.6.2" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Sorting and Searching/Implementation of Binary Search.ipynb b/Sorting and Searching/Implementation of Binary Search.ipynb index aa558014..d5cbeb7d 100644 --- a/Sorting and Searching/Implementation of Binary Search.ipynb +++ b/Sorting and Searching/Implementation of Binary Search.ipynb @@ -18,7 +18,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 4, "metadata": { "collapsed": true }, @@ -35,7 +35,7 @@ " \n", " while first <= last and not found:\n", " \n", - " mid = (first+last)/2 # or // for Python 3\n", + " mid = int((first+last)/2) # or // for Python 3\n", " \n", " # Match found\n", " if arr[mid] == ele:\n", @@ -55,10 +55,8 @@ }, { "cell_type": "code", - "execution_count": 14, - "metadata": { - "collapsed": false - }, + "execution_count": 5, + "metadata": {}, "outputs": [], "source": [ "# list must already be sorted!\n", @@ -67,10 +65,8 @@ }, { "cell_type": "code", - "execution_count": 15, - "metadata": { - "collapsed": false - }, + "execution_count": 6, + "metadata": {}, "outputs": [ { "data": { @@ -78,7 +74,7 @@ "True" ] }, - "execution_count": 15, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -89,10 +85,8 @@ }, { "cell_type": "code", - "execution_count": 16, - "metadata": { - "collapsed": false - }, + "execution_count": 7, + "metadata": {}, "outputs": [ { "data": { @@ -100,7 +94,7 @@ "False" ] }, - "execution_count": 16, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -119,9 +113,7 @@ { "cell_type": "code", "execution_count": 17, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "def rec_bin_search(arr,ele):\n", @@ -153,9 +145,7 @@ { "cell_type": "code", "execution_count": 18, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -175,9 +165,7 @@ { "cell_type": "code", "execution_count": 20, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -204,23 +192,23 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.11" + "pygments_lexer": "ipython3", + "version": "3.6.2" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Sorting and Searching/Implementation of Merge Sort.ipynb b/Sorting and Searching/Implementation of Merge Sort.ipynb index 0ad3b17d..c5896c9a 100644 --- a/Sorting and Searching/Implementation of Merge Sort.ipynb +++ b/Sorting and Searching/Implementation of Merge Sort.ipynb @@ -33,7 +33,7 @@ "def merge_sort(arr):\n", " \n", " if len(arr)>1:\n", - " mid = len(arr)/2\n", + " mid = int(len(arr)/2)\n", " lefthalf = arr[:mid]\n", " righthalf = arr[mid:]\n", "\n", @@ -60,7 +60,8 @@ " while j < len(righthalf):\n", " arr[k]=righthalf[j]\n", " j=j+1\n", - " k=k+1" + " k=k+1\n", + " print(\"Merging \", arr)" ] }, { @@ -68,6 +69,29 @@ "execution_count": 4, "metadata": {}, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Merging [11]\n", + "Merging [2]\n", + "Merging [2, 11]\n", + "Merging [5]\n", + "Merging [4]\n", + "Merging [4, 5]\n", + "Merging [2, 4, 5, 11]\n", + "Merging [7]\n", + "Merging [6]\n", + "Merging [6, 7]\n", + "Merging [8]\n", + "Merging [1]\n", + "Merging [23]\n", + "Merging [1, 23]\n", + "Merging [1, 8, 23]\n", + "Merging [1, 6, 7, 8, 23]\n", + "Merging [1, 2, 4, 5, 6, 7, 8, 11, 23]\n" + ] + }, { "data": { "text/plain": [ diff --git a/Sorting and Searching/Implementation of Selection Sort.ipynb b/Sorting and Searching/Implementation of Selection Sort.ipynb index c6d82a2d..ebc5e35b 100644 --- a/Sorting and Searching/Implementation of Selection Sort.ipynb +++ b/Sorting and Searching/Implementation of Selection Sort.ipynb @@ -51,9 +51,7 @@ { "cell_type": "code", "execution_count": 2, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -82,23 +80,23 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.11" + "pygments_lexer": "ipython3", + "version": "3.6.2" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Sorting and Searching/Implementation of Shell Sort.ipynb b/Sorting and Searching/Implementation of Shell Sort.ipynb index 52bc30fc..65028039 100644 --- a/Sorting and Searching/Implementation of Shell Sort.ipynb +++ b/Sorting and Searching/Implementation of Shell Sort.ipynb @@ -24,27 +24,28 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 7, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def shell_sort(arr):\n", - " sublistcount = len(arr)/2\n", + " sublistcount = int(len(arr)/2)\n", " \n", " # While we still have sub lists\n", " while sublistcount > 0:\n", " for start in range(sublistcount):\n", " # Use a gap insertion\n", " gap_insertion_sort(arr,start,sublistcount)\n", - "\n", - " \n", - "\n", - " sublistcount = sublistcount / 2\n", + " \n", + " print('After increments of size: ', sublistcount) \n", + " print('The list is: ', arr)\n", + " sublistcount = int(sublistcount / 2)\n", "\n", "def gap_insertion_sort(arr,start,gap):\n", " for i in range(start+gap,len(arr),gap):\n", + " #print(start + gap)\n", "\n", " currentvalue = arr[i]\n", " position = i\n", @@ -60,18 +61,99 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "After increments of size: 5\n", + "The list is: [24, 7, 2, 6, 4, 45, 67, 23, 45, 21, 90]\n", + "After increments of size: 2\n", + "The list is: [2, 6, 4, 7, 24, 21, 45, 23, 67, 45, 90]\n", + "After increments of size: 1\n", + "The list is: [2, 4, 6, 7, 21, 23, 24, 45, 45, 67, 90]\n" + ] + }, + { + "data": { + "text/plain": [ + "[2, 4, 6, 7, 21, 23, 24, 45, 45, 67, 90]" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr = [45,67,23,45,21,24,7,2,6,4,90]\n", + "shell_sort(arr)\n", + "arr" + ] + }, + { + "cell_type": "code", + "execution_count": 10, "metadata": { - "collapsed": false + "collapsed": true }, + "outputs": [], + "source": [ + "def shell_sort(arr):\n", + " sublistcount = int(len(arr)/2)\n", + " \n", + " # While we still have sub lists\n", + " while sublistcount > 0:\n", + " # Use a gap insertion\n", + " start = 0 \n", + " gap_insertion_sort(arr,start,sublistcount)\n", + " \n", + " print('After increments of size: ', sublistcount) \n", + " print('The list is: ', arr)\n", + " sublistcount = int(sublistcount / 2)\n", + "\n", + "def gap_insertion_sort(arr,start,gap):\n", + " for i in range(start+gap,len(arr),gap):\n", + " #print(start + gap)\n", + "\n", + " currentvalue = arr[i]\n", + " position = i\n", + "\n", + " # Using the Gap\n", + " while position>=gap and arr[position-gap]>currentvalue:\n", + " arr[position]=arr[position-gap]\n", + " position = position-gap\n", + " \n", + " # Set current value\n", + " arr[position]=currentvalue" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "After increments of size: 5\n", + "The list is: [24, 67, 23, 45, 21, 45, 7, 2, 6, 4, 90]\n", + "After increments of size: 2\n", + "The list is: [6, 67, 7, 45, 21, 45, 23, 2, 24, 4, 90]\n", + "After increments of size: 1\n", + "The list is: [2, 4, 6, 7, 21, 23, 24, 45, 45, 67, 90]\n" + ] + }, { "data": { "text/plain": [ "[2, 4, 6, 7, 21, 23, 24, 45, 45, 67, 90]" ] }, - "execution_count": 6, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -92,23 +174,23 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.11" + "pygments_lexer": "ipython3", + "version": "3.6.2" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Sorting and Searching/Implementation of a Hash Table.ipynb b/Sorting and Searching/Implementation of a Hash Table.ipynb index e71d50a8..1107c7ca 100644 --- a/Sorting and Searching/Implementation of a Hash Table.ipynb +++ b/Sorting and Searching/Implementation of a Hash Table.ipynb @@ -126,7 +126,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 2, "metadata": { "collapsed": true }, @@ -137,8 +137,10 @@ }, { "cell_type": "code", - "execution_count": 5, - "metadata": {}, + "execution_count": 3, + "metadata": { + "collapsed": true + }, "outputs": [], "source": [ "# Put our first key in\n", @@ -147,7 +149,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 4, "metadata": { "collapsed": true }, @@ -158,7 +160,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 5, "metadata": { "collapsed": true }, @@ -169,7 +171,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -178,7 +180,7 @@ "'one'" ] }, - "execution_count": 8, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -189,7 +191,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 7, "metadata": { "collapsed": true }, @@ -200,7 +202,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -209,7 +211,7 @@ "'new_one'" ] }, - "execution_count": 10, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -220,7 +222,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -232,7 +234,7 @@ } ], "source": [ - "print h[4]" + "print(h[4])" ] }, { diff --git a/Sorting and Searching/Sequential Search.ipynb b/Sorting and Searching/Sequential Search.ipynb index f514dc75..749ae815 100644 --- a/Sorting and Searching/Sequential Search.ipynb +++ b/Sorting and Searching/Sequential Search.ipynb @@ -19,7 +19,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 7, "metadata": { "collapsed": true }, @@ -44,14 +44,14 @@ " \n", " # Else move one down\n", " else:\n", - " pos = pos+1\n", + " pos += 1\n", " \n", " return found" ] }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 8, "metadata": { "collapsed": true }, @@ -62,10 +62,8 @@ }, { "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": false - }, + "execution_count": 4, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -76,15 +74,13 @@ } ], "source": [ - "print seq_search(arr,1)" + "print(seq_search(arr,1))" ] }, { "cell_type": "code", - "execution_count": 7, - "metadata": { - "collapsed": false - }, + "execution_count": 6, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -95,7 +91,7 @@ } ], "source": [ - "print seq_search(arr,10)" + "print( seq_search(arr,10))" ] }, { @@ -151,9 +147,7 @@ { "cell_type": "code", "execution_count": 20, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "arr.sort() " @@ -162,9 +156,7 @@ { "cell_type": "code", "execution_count": 22, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -184,9 +176,7 @@ { "cell_type": "code", "execution_count": 24, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -213,23 +203,23 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.11" + "pygments_lexer": "ipython3", + "version": "3.6.2" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Stacks, Queues and Deques/Implementation of Deque.ipynb b/Stacks, Queues and Deques/Implementation of Deque.ipynb index 9016eaa9..b3fc06a6 100644 --- a/Stacks, Queues and Deques/Implementation of Deque.ipynb +++ b/Stacks, Queues and Deques/Implementation of Deque.ipynb @@ -54,7 +54,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 2, "metadata": { "collapsed": true }, @@ -65,7 +65,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 3, "metadata": { "collapsed": true }, @@ -76,7 +76,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 4, "metadata": { "collapsed": true }, @@ -87,10 +87,8 @@ }, { "cell_type": "code", - "execution_count": 13, - "metadata": { - "collapsed": false - }, + "execution_count": 5, + "metadata": {}, "outputs": [ { "data": { @@ -98,7 +96,7 @@ "2" ] }, - "execution_count": 13, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -109,10 +107,8 @@ }, { "cell_type": "code", - "execution_count": 14, - "metadata": { - "collapsed": false - }, + "execution_count": 6, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -123,15 +119,13 @@ } ], "source": [ - "print d.removeFront() + ' ' + d.removeRear()" + "print(d.removeFront() + ' ' + d.removeRear())" ] }, { "cell_type": "code", - "execution_count": 15, - "metadata": { - "collapsed": false - }, + "execution_count": 7, + "metadata": {}, "outputs": [ { "data": { @@ -139,7 +133,7 @@ "0" ] }, - "execution_count": 15, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -165,16 +159,16 @@ "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.10" + "pygments_lexer": "ipython3", + "version": "3.6.2" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Stacks, Queues and Deques/Implementation of Stack.ipynb b/Stacks, Queues and Deques/Implementation of Stack.ipynb index fc3983dd..ab46ccb9 100644 --- a/Stacks, Queues and Deques/Implementation of Stack.ipynb +++ b/Stacks, Queues and Deques/Implementation of Stack.ipynb @@ -31,9 +31,9 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "metadata": { - "collapsed": false + "collapsed": true }, "outputs": [], "source": [ @@ -68,7 +68,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": { "collapsed": true }, @@ -80,9 +80,7 @@ { "cell_type": "code", "execution_count": 4, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -93,7 +91,7 @@ } ], "source": [ - "print s.isEmpty()" + "print(s.isEmpty())" ] }, { @@ -121,9 +119,7 @@ { "cell_type": "code", "execution_count": 7, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -154,9 +150,7 @@ { "cell_type": "code", "execution_count": 9, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -176,9 +170,7 @@ { "cell_type": "code", "execution_count": 10, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -198,9 +190,7 @@ { "cell_type": "code", "execution_count": 11, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -220,16 +210,17 @@ { "cell_type": "code", "execution_count": 12, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "two\n" - ] + "data": { + "text/plain": [ + "'two'" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ @@ -239,9 +230,7 @@ { "cell_type": "code", "execution_count": 13, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -261,9 +250,7 @@ { "cell_type": "code", "execution_count": 14, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -283,9 +270,7 @@ { "cell_type": "code", "execution_count": 15, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -319,16 +304,16 @@ "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.10" + "pygments_lexer": "ipython3", + "version": "3.6.2" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Stacks, Queues and Deques/Stacks, Queues, and Deques Interview Problems/Stacks, Queues, Deques Interview Questions /Balanced Parentheses Check .ipynb b/Stacks, Queues and Deques/Stacks, Queues, and Deques Interview Problems/Stacks, Queues, Deques Interview Questions /Balanced Parentheses Check .ipynb index 274f3ace..7b2d4365 100644 --- a/Stacks, Queues and Deques/Stacks, Queues, and Deques Interview Problems/Stacks, Queues, Deques Interview Questions /Balanced Parentheses Check .ipynb +++ b/Stacks, Queues and Deques/Stacks, Queues, and Deques Interview Problems/Stacks, Queues, Deques Interview Questions /Balanced Parentheses Check .ipynb @@ -20,23 +20,40 @@ }, { "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": true - }, + "execution_count": 12, + "metadata": {}, "outputs": [], "source": [ "def balance_check(s):\n", - " \n", - " pass" + " stack = []\n", + " for item in s:\n", + " if(item == '[') or (item == '(') or (item == '{'):\n", + " stack.append(item)\n", + " else:\n", + " if stack == []:\n", + " return False\n", + " if item == ']':\n", + " if stack[-1] == '[':\n", + " stack.pop()\n", + " else:\n", + " return False\n", + " if item == ')':\n", + " if stack[-1] == '(':\n", + " stack.pop()\n", + " else:\n", + " return False\n", + " if item == '}':\n", + " if stack[-1] == '{':\n", + " stack.pop()\n", + " else:\n", + " return False\n", + " return stack == []" ] }, { "cell_type": "code", "execution_count": 13, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -55,10 +72,8 @@ }, { "cell_type": "code", - "execution_count": 16, - "metadata": { - "collapsed": false - }, + "execution_count": 14, + "metadata": {}, "outputs": [ { "data": { @@ -66,7 +81,7 @@ "True" ] }, - "execution_count": 16, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -77,10 +92,8 @@ }, { "cell_type": "code", - "execution_count": 17, - "metadata": { - "collapsed": false - }, + "execution_count": 15, + "metadata": {}, "outputs": [ { "data": { @@ -88,7 +101,7 @@ "False" ] }, - "execution_count": 17, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -97,6 +110,26 @@ "balance_check('()(){]}')" ] }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "balance_check('[](){([[[]]])}(')" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -106,10 +139,8 @@ }, { "cell_type": "code", - "execution_count": 18, - "metadata": { - "collapsed": false - }, + "execution_count": 17, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -131,7 +162,7 @@ " assert_equal(sol('[](){([[[]]])}('),False)\n", " assert_equal(sol('[{{{(())}}}]((()))'),True)\n", " assert_equal(sol('[[[]])]'),False)\n", - " print 'ALL TEST CASES PASSED'\n", + " print('ALL TEST CASES PASSED')\n", " \n", "# Run Tests\n", "\n", @@ -156,16 +187,16 @@ "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.10" + "pygments_lexer": "ipython3", + "version": "3.6.2" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Stacks, Queues and Deques/Stacks, Queues, and Deques Interview Problems/Stacks, Queues, Deques Interview Questions /Implement a Deque .ipynb b/Stacks, Queues and Deques/Stacks, Queues, and Deques Interview Problems/Stacks, Queues, Deques Interview Questions /Implement a Deque .ipynb index d5c255f7..1994a9eb 100644 --- a/Stacks, Queues and Deques/Stacks, Queues, and Deques Interview Problems/Stacks, Queues, Deques Interview Questions /Implement a Deque .ipynb +++ b/Stacks, Queues and Deques/Stacks, Queues, and Deques Interview Problems/Stacks, Queues, Deques Interview Questions /Implement a Deque .ipynb @@ -23,7 +23,18 @@ "outputs": [], "source": [ "class Deque(object):\n", - " pass" + " def __init__(self):\n", + " self.items = []\n", + " def isEmpty(self):\n", + " return self.items == []\n", + " def add2front(self, item):\n", + " self.items.append(item)\n", + " def add2rear(self, item):\n", + " self.items.insert(0, item)\n", + " def popFront(self):\n", + " return self.items.pop()\n", + " def popBack(self):\n", + " return self.items.pop(0)" ] } ], @@ -36,16 +47,16 @@ "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.10" + "pygments_lexer": "ipython3", + "version": "3.6.2" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Stacks, Queues and Deques/Stacks, Queues, and Deques Interview Problems/Stacks, Queues, Deques Interview Questions /Implement a Queue -Using Two Stacks .ipynb b/Stacks, Queues and Deques/Stacks, Queues, and Deques Interview Problems/Stacks, Queues, Deques Interview Questions /Implement a Queue -Using Two Stacks .ipynb index 907956a6..11f2da02 100644 --- a/Stacks, Queues and Deques/Stacks, Queues, and Deques Interview Problems/Stacks, Queues, Deques Interview Questions /Implement a Queue -Using Two Stacks .ipynb +++ b/Stacks, Queues and Deques/Stacks, Queues, and Deques Interview Problems/Stacks, Queues, Deques Interview Questions /Implement a Queue -Using Two Stacks .ipynb @@ -33,7 +33,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 14, "metadata": { "collapsed": true }, @@ -50,12 +50,17 @@ " def enqueue(self,element):\n", " \n", " # FILL OUT CODE HERE\n", - " pass\n", + " self.stack1.append(element)\n", " \n", " def dequeue(self):\n", " \n", " # FILL OUT CODE HERE\n", - " pass " + " if(self.stack2 == []):\n", + " while(len(self.stack1)):\n", + " self.stack2.append(self.stack1.pop())\n", + " return self.stack2.pop()\n", + " \n", + " " ] }, { @@ -69,10 +74,8 @@ }, { "cell_type": "code", - "execution_count": 34, - "metadata": { - "collapsed": false - }, + "execution_count": 15, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -92,11 +95,11 @@ "\"\"\"\n", "q = Queue2Stacks()\n", "\n", - "for i in xrange(5):\n", + "for i in range(5):\n", " q.enqueue(i)\n", " \n", - "for i in xrange(5):\n", - " print q.dequeue()" + "for i in range(5):\n", + " print(q.dequeue())" ] }, { @@ -116,16 +119,16 @@ "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.10" + "pygments_lexer": "ipython3", + "version": "3.6.2" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Stacks, Queues and Deques/Stacks, Queues, and Deques Interview Problems/Stacks, Queues, Deques Interview Questions /Implement a Queue.ipynb b/Stacks, Queues and Deques/Stacks, Queues, and Deques Interview Problems/Stacks, Queues, Deques Interview Questions /Implement a Queue.ipynb index a5ac0019..402dde5c 100644 --- a/Stacks, Queues and Deques/Stacks, Queues, and Deques Interview Problems/Stacks, Queues, Deques Interview Questions /Implement a Queue.ipynb +++ b/Stacks, Queues and Deques/Stacks, Queues, and Deques Interview Problems/Stacks, Queues, Deques Interview Questions /Implement a Queue.ipynb @@ -23,7 +23,16 @@ "outputs": [], "source": [ "class Queue(object):\n", - " pass" + " def __init__(self):\n", + " self.items = []\n", + " def isEmpty(self):\n", + " return self.items == []\n", + " def Enqueue(self, item):\n", + " self.items.insert(0, item)\n", + " def Dequeue(self):\n", + " return self.items.pop()\n", + " def size():\n", + " return len(self.items)" ] } ], @@ -36,16 +45,16 @@ "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.10" + "pygments_lexer": "ipython3", + "version": "3.6.2" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Stacks, Queues and Deques/Stacks, Queues, and Deques Interview Problems/Stacks, Queues, Deques Interview Questions /Implement a Stack .ipynb b/Stacks, Queues and Deques/Stacks, Queues, and Deques Interview Problems/Stacks, Queues, Deques Interview Questions /Implement a Stack .ipynb index 6dea3952..df10cda1 100644 --- a/Stacks, Queues and Deques/Stacks, Queues, and Deques Interview Problems/Stacks, Queues, Deques Interview Questions /Implement a Stack .ipynb +++ b/Stacks, Queues and Deques/Stacks, Queues, and Deques Interview Problems/Stacks, Queues, Deques Interview Questions /Implement a Stack .ipynb @@ -19,7 +19,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 10, "metadata": { "collapsed": true }, @@ -27,10 +27,80 @@ "source": [ "class Stack(object):\n", " \n", - " \n", " # Fill out the Stack Methods here\n", - " pass" + " def __init__(self):\n", + " self.items = []\n", + " def isEmpty(self):\n", + " return len(self.items) == 0\n", + " def push(self, item):\n", + " self.items.append(item)\n", + " def pop(self):\n", + " return self.items.pop()\n", + " def peek(self):\n", + " return self.items[-1]\n", + " def size(self):\n", + " return len(self.items)\n", + " " ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "s = Stack()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "True\n" + ] + } + ], + "source": [ + "print(s.isEmpty())" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'two'" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "s.push(1)\n", + "s.push('two')\n", + "s.peek()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] } ], "metadata": { @@ -42,16 +112,16 @@ "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.10" + "pygments_lexer": "ipython3", + "version": "3.6.2" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Trees/Binary Heap Implementation.ipynb b/Trees/Binary Heap Implementation.ipynb index e5630cee..f5f230bd 100644 --- a/Trees/Binary Heap Implementation.ipynb +++ b/Trees/Binary Heap Implementation.ipynb @@ -110,23 +110,23 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.11" + "pygments_lexer": "ipython3", + "version": "3.6.2" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Trees/Binary Search Trees.ipynb b/Trees/Binary Search Trees.ipynb index c6679bb0..92a92a53 100644 --- a/Trees/Binary Search Trees.ipynb +++ b/Trees/Binary Search Trees.ipynb @@ -16,10 +16,8 @@ }, { "cell_type": "code", - "execution_count": 5, - "metadata": { - "collapsed": false - }, + "execution_count": 1, + "metadata": {}, "outputs": [], "source": [ "class TreeNode:\n", @@ -150,6 +148,19 @@ " def __delitem__(self,key):\n", " \n", " self.delete(key)\n", + " \n", + " # this is recursive\n", + " # __iter__ overrides for x in \n", + " def __iter__(self):\n", + " if self:\n", + " if self.hasLeftChild():\n", + " for elem in self.leftChild:\n", + " yield elem\n", + " yield self.key\n", + " \n", + " if self.hasRightChild():\n", + " for elem in self.rightChild:\n", + " yield elem\n", "\n", " def spliceOut(self):\n", " if self.isLeaf():\n", @@ -248,10 +259,8 @@ }, { "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": false - }, + "execution_count": 2, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -283,23 +292,23 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.11" + "pygments_lexer": "ipython3", + "version": "3.6.2" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Trees/Binary-Heap-implementation.pptm b/Trees/Binary-Heap-implementation.pptm new file mode 100644 index 00000000..0ba0a560 Binary files /dev/null and b/Trees/Binary-Heap-implementation.pptm differ diff --git a/Trees/Binary-search-trees.pptm b/Trees/Binary-search-trees.pptm new file mode 100644 index 00000000..c6f9ded2 Binary files /dev/null and b/Trees/Binary-search-trees.pptm differ diff --git a/Trees/Nodes-and-References-Implementation.pptm b/Trees/Nodes-and-References-Implementation.pptm new file mode 100644 index 00000000..65a55b2b Binary files /dev/null and b/Trees/Nodes-and-References-Implementation.pptm differ diff --git a/Trees/Priority-Queues-with-Binary-Heaps.pptm b/Trees/Priority-Queues-with-Binary-Heaps.pptm new file mode 100644 index 00000000..6515918b Binary files /dev/null and b/Trees/Priority-Queues-with-Binary-Heaps.pptm differ diff --git a/Trees/Tree Representation Implementation (Lists).ipynb b/Trees/Tree Representation Implementation (Lists).ipynb index ad33ac3f..985ef987 100644 --- a/Trees/Tree Representation Implementation (Lists).ipynb +++ b/Trees/Tree Representation Implementation (Lists).ipynb @@ -11,7 +11,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": { "collapsed": true }, @@ -48,27 +48,149 @@ "def getRightChild(root):\n", " return root[2]" ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "r = BinaryTree(3)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[3, [4, [], []], []]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "insertLeft(r, 4)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[3, [5, [4, [], []], []], []]" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "insertLeft(r, 5)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[3, [5, [4, [], []], []], [6, [], []]]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "insertRight(r, 6)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[3, [5, [4, [], []], []], [7, [], [6, [], []]]]" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "insertRight(r, 7)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[5, [4, [], []], []]" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "getLeftChild(r)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "setRootVal()" + ] } ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.11" + "pygments_lexer": "ipython3", + "version": "3.6.2" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Trees/Tree Representation Implementation (Nodes and References).ipynb b/Trees/Tree Representation Implementation (Nodes and References).ipynb index 5ca824e2..2f31a4bb 100644 --- a/Trees/Tree Representation Implementation (Nodes and References).ipynb +++ b/Trees/Tree Representation Implementation (Nodes and References).ipynb @@ -11,7 +11,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 1, "metadata": { "collapsed": true }, @@ -62,10 +62,8 @@ }, { "cell_type": "code", - "execution_count": 35, - "metadata": { - "collapsed": false - }, + "execution_count": 2, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -73,9 +71,9 @@ "text": [ "a\n", "None\n", - "<__main__.BinaryTree object at 0x104779c10>\n", + "<__main__.BinaryTree object at 0x7ff02c3def60>\n", "b\n", - "<__main__.BinaryTree object at 0x103b42c50>\n", + "<__main__.BinaryTree object at 0x7ff02c3dee48>\n", "c\n", "hello\n" ] @@ -96,27 +94,36 @@ "r.getRightChild().setRootVal('hello')\n", "print(r.getRightChild().getRootVal())" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.11" + "pygments_lexer": "ipython3", + "version": "3.6.2" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Trees/Tree-Representation-Implementation.pptm b/Trees/Tree-Representation-Implementation.pptm new file mode 100644 index 00000000..e1f6d42d Binary files /dev/null and b/Trees/Tree-Representation-Implementation.pptm differ diff --git a/Trees/Tree-Traversals.pptm b/Trees/Tree-Traversals.pptm new file mode 100644 index 00000000..da8c299b Binary files /dev/null and b/Trees/Tree-Traversals.pptm differ diff --git a/Trees/Trees Interview Problems - SOLUTIONS/.ipynb_checkpoints/Tree Level Order Print - SOLUTION-checkpoint.ipynb b/Trees/Trees Interview Problems - SOLUTIONS/.ipynb_checkpoints/Tree Level Order Print - SOLUTION-checkpoint.ipynb index 015366eb..47623b5a 100644 --- a/Trees/Trees Interview Problems - SOLUTIONS/.ipynb_checkpoints/Tree Level Order Print - SOLUTION-checkpoint.ipynb +++ b/Trees/Trees Interview Problems - SOLUTIONS/.ipynb_checkpoints/Tree Level Order Print - SOLUTION-checkpoint.ipynb @@ -46,10 +46,17 @@ { "cell_type": "code", "execution_count": 2, - "metadata": { - "collapsed": true - }, - "outputs": [], + "metadata": {}, + "outputs": [ + { + "ename": "SyntaxError", + "evalue": "Missing parentheses in call to 'print' (, line 9)", + "output_type": "error", + "traceback": [ + "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m9\u001b[0m\n\u001b[0;31m print currentNode.val,\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m Missing parentheses in call to 'print'\n" + ] + } + ], "source": [ "def levelOrderPrint(tree):\n", " if not tree:\n", @@ -68,7 +75,7 @@ " nextCount+=1\n", " if currentCount==0:\n", " #finished printing current level\n", - " print '\\n',\n", + " print('\\n'),\n", " currentCount, nextCount = nextCount, currentCount" ] }, @@ -91,23 +98,23 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.11" + "pygments_lexer": "ipython3", + "version": "3.6.2" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Trees/Trees Interview Problems - SOLUTIONS/Tree Level Order Print - SOLUTION.ipynb b/Trees/Trees Interview Problems - SOLUTIONS/Tree Level Order Print - SOLUTION.ipynb index 9b0ec477..4f9a77c8 100644 --- a/Trees/Trees Interview Problems - SOLUTIONS/Tree Level Order Print - SOLUTION.ipynb +++ b/Trees/Trees Interview Problems - SOLUTIONS/Tree Level Order Print - SOLUTION.ipynb @@ -30,7 +30,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 5, "metadata": { "collapsed": true }, @@ -45,12 +45,12 @@ }, { "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": true - }, + "execution_count": 9, + "metadata": {}, "outputs": [], "source": [ + "import collections\n", + "\n", "def levelOrderPrint(tree):\n", " if not tree:\n", " return\n", @@ -59,7 +59,7 @@ " while len(nodes)!=0:\n", " currentNode=nodes.popleft()\n", " currentCount-=1\n", - " print currentNode.val,\n", + " print(currentNode.val, end=\" \")\n", " if currentNode.left:\n", " nodes.append(currentNode.left)\n", " nextCount+=1\n", @@ -68,10 +68,33 @@ " nextCount+=1\n", " if currentCount==0:\n", " #finished printing current level\n", - " print '\\n',\n", + " print('\\n'),\n", " currentCount, nextCount = nextCount, currentCount" ] }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1 \n", + "\n", + "2 3 \n", + "\n" + ] + } + ], + "source": [ + "root = Node(1)\n", + "root.left = Node(2)\n", + "root.right = Node(3)\n", + "levelOrderPrint(root)" + ] + }, { "cell_type": "markdown", "metadata": {}, diff --git a/Trees/Trees Interview Problems/.ipynb_checkpoints/Tree Level Order Print-checkpoint.ipynb b/Trees/Trees Interview Problems/.ipynb_checkpoints/Tree Level Order Print-checkpoint.ipynb index 7d44b4d9..59abd294 100644 --- a/Trees/Trees Interview Problems/.ipynb_checkpoints/Tree Level Order Print-checkpoint.ipynb +++ b/Trees/Trees Interview Problems/.ipynb_checkpoints/Tree Level Order Print-checkpoint.ipynb @@ -53,27 +53,72 @@ " #Code here\n", " pass" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "class Solution:\n", + " def levelOrder(self, root):\n", + " \"\"\"\n", + " :type root: TreeNode\n", + " :rtype: List[List[int]]\n", + " \"\"\"\n", + " result = []\n", + "\n", + " if root == None:\n", + " return result\n", + " \n", + " myq = []\n", + " myq.insert(0, root)\n", + "\n", + " lq = []\n", + " this_level = []\n", + " \n", + " while len(myq):\n", + " front = myq.pop()\n", + " this_level.append(front.val)\n", + " \n", + " if front.left is not None:\n", + " lq.insert(0, front.left)\n", + " if front.right is not None:\n", + " lq.insert(0, front.right)\n", + " \n", + " if len(myq) == 0:\n", + " for node in (lq):\n", + " myq.append(node) \n", + " result.append(this_level)\n", + "\n", + " this_level = []\n", + " lq = []\n", + " \n", + " return result" + ] } ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.11" + "pygments_lexer": "ipython3", + "version": "3.6.2" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Trees/Trees Interview Problems/Binary Search Tree Check.ipynb b/Trees/Trees Interview Problems/Binary Search Tree Check.ipynb index 74a68fe1..43fc59c8 100644 --- a/Trees/Trees Interview Problems/Binary Search Tree Check.ipynb +++ b/Trees/Trees Interview Problems/Binary Search Tree Check.ipynb @@ -20,12 +20,36 @@ { "cell_type": "code", "execution_count": 1, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ - "# Code goes Here" + "# Code goes He# Definition for a binary tree node.\n", + "# class TreeNode:\n", + "# def __init__(self, x):\n", + "# self.val = x\n", + "# self.left = None\n", + "# self.right = None\n", + "\n", + "class Solution:\n", + " def isValidBST(self, root):\n", + " \"\"\"\n", + " :type root: TreeNode\n", + " :rtype: bool\n", + " \"\"\"\n", + " inf = float(\"Inf\")\n", + " return self.helper(root, -inf, inf)\n", + " \n", + " def helper(self, root, minval, maxval):\n", + " if root == None:\n", + " return True\n", + " \n", + " if (root.val <= minval) or (root.val >= maxval):\n", + " return False\n", + " \n", + " left = self.helper(root.left, minval, root.val)\n", + " right = self.helper(root.right, root.val, maxval)\n", + " \n", + " return left and rightre" ] }, { @@ -38,23 +62,23 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.11" + "pygments_lexer": "ipython3", + "version": "3.6.2" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Trees/Trees Interview Problems/Tree Level Order Print.ipynb b/Trees/Trees Interview Problems/Tree Level Order Print.ipynb index 7d44b4d9..59abd294 100644 --- a/Trees/Trees Interview Problems/Tree Level Order Print.ipynb +++ b/Trees/Trees Interview Problems/Tree Level Order Print.ipynb @@ -53,27 +53,72 @@ " #Code here\n", " pass" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "class Solution:\n", + " def levelOrder(self, root):\n", + " \"\"\"\n", + " :type root: TreeNode\n", + " :rtype: List[List[int]]\n", + " \"\"\"\n", + " result = []\n", + "\n", + " if root == None:\n", + " return result\n", + " \n", + " myq = []\n", + " myq.insert(0, root)\n", + "\n", + " lq = []\n", + " this_level = []\n", + " \n", + " while len(myq):\n", + " front = myq.pop()\n", + " this_level.append(front.val)\n", + " \n", + " if front.left is not None:\n", + " lq.insert(0, front.left)\n", + " if front.right is not None:\n", + " lq.insert(0, front.right)\n", + " \n", + " if len(myq) == 0:\n", + " for node in (lq):\n", + " myq.append(node) \n", + " result.append(this_level)\n", + "\n", + " this_level = []\n", + " lq = []\n", + " \n", + " return result" + ] } ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.11" + "pygments_lexer": "ipython3", + "version": "3.6.2" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Trees/Trees Interview Problems/Trim a Binary Search Tree .ipynb b/Trees/Trees Interview Problems/Trim a Binary Search Tree .ipynb index b3aa23dd..e6a0ece9 100644 --- a/Trees/Trees Interview Problems/Trim a Binary Search Tree .ipynb +++ b/Trees/Trees Interview Problems/Trim a Binary Search Tree .ipynb @@ -54,23 +54,23 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.11" + "pygments_lexer": "ipython3", + "version": "3.6.2" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Trees/implement-binary-search-trees.pptm b/Trees/implement-binary-search-trees.pptm new file mode 100644 index 00000000..289846f0 Binary files /dev/null and b/Trees/implement-binary-search-trees.pptm differ