【leetcode】88.(Easy)Merge Sorted Array
解題思路:
指標從後向前走,時間複雜度為O(m+n)
提交程式碼:
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int p1=m-1,p2=n-1,p3=m+n-1;
while(p1>=0&&p2>=0)
nums1[p3--]=nums1[p1]>nums2[p2]?nums1[p1--]:nums2[p2--];
while(p1>=0)
nums1[ p3--]=nums1[p1--];
while(p2>=0)
nums1[p3--]=nums2[p2--];
}
}
執行結果:
相關推薦
【leetcode】88.(Easy)Merge Sorted Array
解題思路: 指標從後向前走,時間複雜度為O(m+n) 提交程式碼: class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { int p1=m-1,p2=n-
【leetcode】69. (Easy)Sqrt(x)
解題思路: 二分法,同時使用double來記錄數字 此外後面討論區有個答案還挺好的,使用mid>x/mid?來進行判斷,避免了數字型別轉換。 提交程式碼: class Solution { public int mySqrt(int x) { if(x=
【leetcode】67.(Easy)Add Binary
提交程式碼: class Solution { public String addBinary(String a, String b) { int numA,numB,carry=0; int p1=a.length()-1,p2=b.length()-1;
【leetcode】66. (Easy)Plus One
提交程式碼: class Solution { public int[] plusOne(int[] digits) { int i,num; List<Integer> tmp=new ArrayList<Integer>();
【leetcode】58. (Easy)Length of Last Word
提交程式碼: class Solution { public int lengthOfLastWord(String s) { int len=0,p=s.length()-1; while(p>=0&&s.charAt(p)
【leetcode】56. (Hard)Merge Intervals
解題思路: 剛開始我準備先將所有的interval按照start的大小先排序,然後再排序。但是太耗時了。第二種做法參考了題目後面的description 提交程式碼: class Solution { public List<Interval> merge(Lis
【leetcode】35. (Easy)Search Insert Postion(JAVA)
題目連結 解題思路: 還是折半查詢,設定三個指標分別指向陣列兩邊和中間,如果中間的值是要找的值直接返回位置座標; 如果左指標和右指標重合,說明沒有找到這個數,可以分為3個情況: 目標大於最大數時,此時指標right在陣列最右位置,返回right的下一個位置;
【leetcode】101.(Easy)Symmetric Tree
解題思路: morris遍歷+雙指標 以先序遍歷的方式遍歷根節點的左子樹,以“右子樹根節點左子樹”的方式遍歷右子樹 時間複雜度:O(n) 空間複雜度:O(1) 提交程式碼: class Solution{ public List<String> wordBreak(
【leetcode】100.(Easy)Same Tree
解題思路: 遞迴 提交程式碼: class Solution { public boolean isSameTree(TreeNode p, TreeNode q) { if(p==null&&q!=null) return false;
【leetcode】104.(Easy)Maximum Depth of Binary Tree
解題思路: bfs或dfs 提交程式碼:bfs class Solution { public int maxDepth(TreeNode root) { if(root==null) return 0; int
【leetcode】122.(Easy)Best Time to Buy and Sell Stock II
解題思路: 迭代更新 時間複雜度:O(n) 提交程式碼:滑動視窗 class Solution { public int maxProfit(int[] prices) { if(prices.length==0) return 0;
【leetcode】121.(Easy)Best Time to Buy and Sell Stock
解題思路: 方法一:滑動視窗 時間複雜度:O(n) 方法二:迭代更新 每當有更低價時更新買價, 每當有更高價時更新賣價, 期間更新每一次的買價和賣價的差價 另一方面,為了避免用“今天的低價”購買“昨天的高價”,在有更低價時同時更新買價和賣價(繼而當
【leetcode】119.(Easy)Pascal's Triangle II
解題思路: 維護一個一維list表 時間複雜度:O(n1) n1是到當前排為止所有元素的個數 空間複雜度:O(n2) n2是層數 提交程式碼: class Solution { public List<Integer> getRow(int rowIndex)
【leetcode】118.(Easy)Pascal's Triangle
解題思路: 遞迴 時間複雜度:O(n) n是最終所有元素的個數和 提交程式碼: class Solution { public List<List<Integer>> generate(int numRows) { List<L
【leetcode】141.(Easy)Linked List Cycle
解題思路: 維護一個map,如果當前節點的下一個節點是已經存在的節點(map中的節點)則連結串列有迴圈 提交程式碼: class Solution { public boolean hasCycle(ListNode head) { if(head==n
【leetcode】50.(Medium )Pow(x,n)
題目連結 解題思路: 這道題的意思就是求x的n次方。 如果xx求下去,求n-1次,這樣是超時的。 我的思路是,首先求xx,然後n就可以減少2,然後求(xx)(x*x),這樣n就可以減少4… 就是n不是-1、-1、-1…這樣減下去,而是-2、-4、-8…這樣減下去 迭代cnt次後,
【leetcode】48.(Medium)Rotate Image
題目連結 解題思路: 首先如果二維陣列是11或者22,直接蠻力計算; 如果是22以上,可以一圈一圈(rotate circle)地計算反轉90度之後的結果。 比如,對於下面55的陣列: 首先設定一個數組tmp將框1中的數字儲存起來, 然後計算翻轉後框1(top layer)中的
【leetcode】47.(Medium)PermutationsII
題目連結 解題思路: 參考 首先進行排序; 如果陣列中沒有重複的數字,就按照permutations的方法來做就可以了; 如果陣列中有2個重複的數字,比如[1,1,3],首先將陣列分為[1]和[1,3], 對[1,3]進行全排列有[1,3]和[3,1],在所有子全排列中
【leetcode】46. (Medium )Permutations
題目連結 解題思路: 這道題的意思就是給你一組數,其中的數字都不一樣,然後求這些數字所有的全排列組合。 比較簡單的思路是: 1.首先如果陣列中只有一個數比如2,那就只返回這個數構成的全排列; 2.如果有兩個數比如1,2那先求2全排列,可以得到[[2]], 然後在這些子全排
【leetcode】32.(Hard)Longest Valid
題目連結 解題思路: 這道題的意思就是在在一串左右括號中,找到最長匹配的連續括號子串長度。 比如: ()(())))) 最長的有效子串長度是6 ()(((((((()) 最長的有效子串長度是4 我的想法是DP,但是是不完全的DP。 首先建立一個數組mark[]。