36.输入两个链表,找出它们的第一个公共结点。
解题思路:这里主要是把两个链表的节点都放入两个栈中,这样就可以按照出栈的方式来比较节点,因为单链表只要是有相同的节点,那么之后的节点也都是一样的,所以如果出栈的节点不相同的话就可以返回之前保存的commonNode变量,这么变量的值就是第一个共同的节点。
import java.util.Stack; /* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/ public class Solution { public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) { if(pHead1 == null || pHead2 == null) return null; ListNode commonNode = null; Stack<ListNode> s1 = new Stack<ListNode>(); Stack<ListNode> s2 = new Stack<ListNode>(); s1.push(pHead1); s2.push(pHead2); ListNode p1 = pHead1; ListNode p2 = pHead2; while(p1.next != null){ s1.push(p1.next); p1 = p1.next; } while(p2.next != null){ s2.push(p2.next); p2 = p2.next; } while(s1.peek() == s2.peek()){ commonNode = s1.peek(); if(s1.peek() != null) s1.pop(); if(s2.peek() != null) s2.pop(); //如果s1或者s2为空就直接跳出循环 if(s1.empty() || s2.empty()) break; } return commonNode; } }
37.统计一个数字在排序数组中出现的次数。
public class Solution { public int GetNumberOfK(int [] array , int k) { int len = array.length; int first = -1; int last = -1; int num = 0; for(int i = 0; i < len; i++){ if(array[i] == k){ first = i; break; } } for(int i = len-1; i >= 0; i--){ if(array[i] == k){ last = i; break; } } //如果first和last为-1的话,证明数组中没有和k相同的 if(first != -1 && last != -1){ num = last - first +1; } else{ num = 0; } return num; } }
原文:http://www.cnblogs.com/wgl1995/p/5828432.html