題目描述
定義棧的數據結構,請在該類型中實現一個可以獲得棧最小元素的min函數。java
感受題目很無聊。。。我大js作這題就是方便,也讓我深入意識到相對其餘語言js繼承的強大性和靈活性。。。node
var stack = []; function push(node) { stack.push(node); } function pop() { stack.pop(); } function top() { return stack[stack.length-1]; } function min() { return Math.min.call(null,...stack); } /*js作起來就是簡單,若是用Java作有下面一個思路: 思路:用一個棧data保存數據,用另一個棧min保存依次入棧最小的數 好比,data中依次入棧,5, 4, 3, 8, 10, 11, 12, 1 則min依次入棧,5, 4, 3,no,no, no, no, 1 no表明這次不如棧 每次入棧的時候,若是入棧的元素比min中的棧頂元素小或等於則入棧,不然不如棧。 import java.util.Stack; public class Solution { Stack<Integer> data = new Stack<Integer>(); Stack<Integer> min = new Stack<Integer>(); Integer temp = null; public void push(int node) { if(temp != null){ if(node <= temp ){ temp = node; min.push(node); } data.push(node); }else{ temp = node; data.push(node); min.push(node); } } public void pop() { int num = data.pop(); int num2 = min.pop(); if(num != num2){ min.push(num2); } } public int top() { int num = data.peek(); return num; } public int min() { int num = min.peek(); return num; } } */
題目描述
輸入一個字符串,按字典序打印出該字符串中字符的全部排列。例如輸入字符串abc,則打印出由字符a,b,c所能排列出來的全部字符串abc,acb,bac,bca,cab和cba。
輸入描述:
輸入一個字符串,長度不超過9(可能有字符重複),字符只包括大小寫字母。數組
經典dfs題,主要是交換思想,遞歸樹遍歷的第一層(非根)就是a(第一個位置)和其餘全部位置的交換,下一層就是第一個位置肯定了,第二個位置和剩下位置的交換,下下層。。。依次推。其實push的是最後的葉子節點,這裏葉子節點也就是到邊界條件,注意也要第一次也要和本身交換,過程當中的是不會被push的,好比第二層的abc仍是要走交換流程返回到第三層的abc才能被push到,這就是邊界條件。
數據結構
注意最大的坑。。用js語言作的話不要瞎返回null什麼的,主要看題目,若是返回多個就返回空數組[],單個返回0什麼的。這個坑了一天。。。。=-=函數
function Permutation(str) { let ans = []; let arr = str.split(""); if(str.length===0) return []; dfs(ans,arr,0); // ans.map(function (item,index) { // return item.join(""); // }) ans = ans.filter(function (item,index) { return ans.indexOf(item)===index; }); return ans.sort(); } function dfs(ans,arr,begin) { if (begin === arr.length - 1) { // let tmp = arr; // ans.push(JSON.parse(JSON.stringify(arr))); let tmp = arr.join(""); ans.push(tmp); // ans.push(arr); // console.log(ans); } for (let i = begin; i < arr.length; i++) { if (i !== begin && arr[begin] === arr[i]) continue; // let _arr = swap(arr,begin, i); swap(arr,begin,i) // console.log(arr); dfs(ans, arr, begin + 1); swap(arr,begin, i); } } function swap(arr,a,b){ let tmp = arr[a]; arr[a] = arr[b]; arr[b] = tmp; // return arr; }
題目描述
數組中有一個數字出現的次數超過數組長度的一半,請找出這個數字。例如輸入一個長度爲9的數組{1,2,3,2,2,2,5,4,2}。因爲數字2在數組中出現了5次,超過數組長度的一半,所以輸出2。若是不存在則輸出0。code
簡單題,hash一下,主要注意的就是js弱類型數組的處理。。。。blog
function MoreThanHalfNum_Solution(numbers) { var len = numbers.length; if(len===0) return 0; let cnt = [],index; for(let i = 0; i < len; i++) { index = numbers[i]; cnt[index]===undefined||NaN? cnt[index]=1 : cnt[index]++; } //console.log(cnt); let max = -1; let cur = 0; let cntlen = cnt.length; for(let i = 0; i < cntlen; i++) { if(!cnt[i]) continue; max = max>cnt[i]? max : (cur = i,cnt[i]) } if(max>(len/2)) { return cur; }else { return 0; } }