算法
也想一个人去旅行
后来,我想,我应该留下些什么,来证明我曾来过。
展开
-
二分查找
在有序数组中进行查找,采用二分查找,时间复杂度log n。 基本的二分查找 在一个有序数组中,查找一个数,如果存在,返回数的下标; 不存在,返回-1。 int binarySearch(int []arr,int target) { if(arr==null||arr.length==0) return -1; int left=0,right=arr.length-1; while(l...原创 2020-03-08 11:57:46 · 100 阅读 · 0 评论 -
leetcode_53_最大子序和
题目 分析 刚开始考虑的是当前值的正负对结果的影响,好愚蠢的想法啊。应该是考虑加上当前值后的和的正负,还好我机智。(-_- 代码 class Solution { public int maxSubArray(int[] nums) { // 只要前面的数大于0 就继续保留 int ans=-Integer.MAX_VALUE; int sum=0; ...原创 2020-03-04 17:18:07 · 54 阅读 · 0 评论 -
二叉树(1)
二叉树的前序遍历 采用递归的方式可以很快得到结果,中序遍历和后序遍历与该算法几乎一样,只是有几行代码的位置换一换。 前序遍历: 先保存根节点的值,然后再去遍历左子树,然后遍历右子树。因此,添加结点值的代码在遍历左子树和右子树的结点的上面。 /** * Definition for a binary tree node. * public class TreeNode { * in...原创 2020-03-04 11:58:42 · 90 阅读 · 0 评论 -
leetcode_121_买卖股票的最佳时机
题目 分析 要想时间复杂度最低,那么就应该遍历完一次数组后,就可以得到最大利润。要想得到最大利润,要计算当前价格与之前的最低价格进行相减,然后与之前的最大利润进行比较,即可得到结果。 代码 class Solution { public int maxProfit(int[] prices) { if(prices==null||prices.length<=1) ...原创 2020-03-03 09:30:03 · 90 阅读 · 0 评论 -
leetcode_287_寻找重复数
题目 分析 看到在数组中查找某个数,可以尝试结合数组下标来进行操作。 代码 class Solution { public int findDuplicate(int[] nums) { for(int i=0;i<nums.length;i++){ int a=Math.abs(nums[i]); if(nums[a...原创 2020-03-02 21:25:01 · 131 阅读 · 0 评论 -
leetcode_41_缺失的第一个正数
题目 分析 看到查找某个数,就应该考虑哈希。这里用HashMap不合适,输入量本身就是一个数组,可以借助于数组的下标来达到哈希的效果。可以在原数组进行操作;也可以新开辟一个数组进行操作。新开辟数组更简单那。 代码 利用原数组: class Solution { public int firstMissingPositive(int[] nums) { boolean ...原创 2020-03-02 20:53:35 · 107 阅读 · 0 评论