铁锤的Blog 
  • Home
  • Archives
  • Categories
  • Tags
  • About
  •     

LeetCode-Spiral Matrix

LeetCode: Spiral Matrix题目: 顺时针打印矩阵 例子: Example 1: Input: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] Output: [1,2,3,6,9,8,7,4,5] Example 2: Input: [ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12] ] Output: [1,2,3,4,8,12,11,10,9,5,6,7] 思路: 就是从左至右,从上至下,从右至左,从下至上进行打印矩阵即可,但是这里要注意只剩1行和1列的处理 代码:class Solution { public List<Integer> spiralOrder(int[][] matrix) { List<Integer> result = new ArrayList<>(); if(matrix == null || matrix.length == 0){ ret
 2018-07-18   编程  算法    算法  Leetcode 

LeetCode-Product of Array Except Self

LeetCode:Product of Array Except Self题目: 给一个长度大于1的数组,返回一个数组使得output[i] 等于nums中元素除了自身(nums[i])的乘积。要O(n)的复杂度。 例子: Input: [1,2,3,4] Output: [24,12,8,6] 思路: 算出一个总的乘积,当前位置就是总的乘积除以当前的值。 代码:class Solution { public int[] productExceptSelf(int[] nums) { if( nums == null || nums.length < 2){ return nums; } int length = nums.length; long total = 1L; int zeroCount = 0; for(int i = 0; i < length; i++){ if(nums[i] != 0){
 2018-07-17   编程  算法    算法  Leetcode 

LeetCode-Jump Game II

LeetCode : Jump Game II题目: 给出一个只含正数的数组,一开始你就在数组的第一个索引上,每个元素代表你能跳的最大步数,你的目标是用最小的跳数跳到数组末尾。保证不会存在不能跳到数组末尾的情况(不保证的话可以判断一下就是JUMP GAME I)。 例子: 思路: 显然这是一个贪心算法,从后往前看,每次获取到最靠前的索引值,然后用这个索引值进行迭代就可以解题。但是我这么做时间复杂度是O(n^2),并没有发挥贪心的特性。 解法一:class Solution { public int jump(int[] nums) { if(nums== null || nums.length < 2){ return 0; } int count = 0; int length = nums.length; int lastPos = length -1; int minIndex = le
 2018-07-17   编程  算法    算法  Leetcode 

LeetCode-Valid Sudoku

LeetCode : Valid Sudoku题目: 验证一个未填满的9x9的数独盘是否遵守如下法则: 每一行只出现一次1-9的数字 每一列只出现一次1-9的数字 每一个3x3的小方格只出现一次1-9的数字 例子: 思路: 很简单,就是分别进行行,列,方格的字符校验即可。 代码:class Solution { public boolean isValidSudoku(char[][] board) { int length = board.length; Map<Character,Integer> rowTemp = new HashMap<>(length); Map<Character,Integer> columTemp = new HashMap<>(length); //row colum for(int i = 0; i<length;i++ ){ for(int j = 0; j<leng
 2018-06-29   编程  算法    算法  Leetcode 

LeetCode-Search for a Range

LeetCode: Search for a Range题目: 给出一个递增数组,找到target的开始和结束为止并返回。复杂度必须为O(logn),如果没找到返回[-1,-1]; 例子: //例一 Input: nums = [5,7,7,8,8,10], target = 8 Output: [3,4] //例二 Input: nums = [5,7,7,8,8,10], target = 6 Output: [-1,-1] 思路: 我的思路是既然是递增序列,肯定首选二分查找,关键在于找边界,其实也不难,找到其中一个值,向两边顺序找左边界和右边界,返回即可。不过最坏的时间复杂度是O(n/2),即整个数组全为同一个值的情况。但是实际运行效果还是超过了80%的人。 代码: public int[] searchRange(int[] nums, int target) { if (nums == null || nums.length < 1) { return new int[]{-1, -1}; }
 2018-06-28   编程  算法    算法  Leetcode 

LeetCode-Next Permutation

LeetCode: Next Permutation题目: 大意就是找出以当前数组从左至右为一个数字的下一个大的数字的数组组合,只能用常量的空间。若已经为最大数,则返回递增数组。 例子:1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,1 思路: 其实这个题我一开始想的思路是从后往前找第一个比前一个值大的数,该位置就称为index好了,要满足nums[index]>nums[index-1],交换就OK,但是仔细想了下不对,应该是找到那个位置,然后从后往前找出最小的那个比nums[index-1]大的值,交换后排序index-1后的数组就OK了。 代码:class Solution { public void nextPermutation(int[] nums) { if(nums == null || nums.length <= 1){ return; } int length = nums.length;
 2018-06-25   编程  算法    算法  Leetcode 

synchronized理解与实践

作为Java使用者,对于synchronized肯定不陌生,它是多线程中重要的一个机制,能够保证多线程程序在共享数据时的正确性。但是最近遇到一个问题,久久没有想明白,查阅了很多博客和资料最终终于想明白了,决定写记录下来。 如果想了解synchronized的机制以及原理可以参考: Java 之 synchronized 详解 起因 private static void synchronizedDemo() { Task task = new Task(); for (int i = 0; i < 10; i++) { new Thread(task).start(); } } private static class Task implements Runnable { private static final String MY_LOCK_DATE = "date_lock"; private Integer value =
 2018-02-02   Java  编程    Thread 

ThreadLocal理解与实践

​ 首先贴出源码的对于该类的注释,大意讲的是这个类提供了线程封闭的变量。所谓线程封闭指的是其他线程不可以访问这个变量,每一个线程对应该变量的一个副本。当ThreadLocal被声明成private static时,一般用来将一个属性与当前线程联系起来(比如当前的线程ID,用户ID)。 /** * This class provides thread-local variables. These variables differ from * their normal counterparts in that each thread that accesses one (via its * {@code get} or {@code set} method) has its own, independently initialized * copy of the variable. {@code ThreadLocal} instances are typically private * static fields in classes that wish t
 2018-01-31   Java  编程    Java 

2017总结

  时光匆匆,一转眼一年又过去了。很多事情都像是昨天刚刚发生的一样,越长大就越感觉到时间流逝之快远远超过预料。从前老师给布置任务让做年终个人总结,但当时从来都是敷衍,现在才感觉到这不失为一种记录时间的方法,所以就用这篇流水账记录一下我的2017。 学业  今年到头来虽然也感觉自己不会的知识很多,但是比起一年前的自己还是很有进步的。当然也有更多不足之处,需要在新的一年里努力加油的。   细算一下进步体现在以下几个方面。首先是专业知识的理解加深,包括对整个计算机的理解,对工作语言Java本身的理解,对所应用到的一些知识的理解也都进了一步,不过这都是在结合别人建议之后进行加深的,这也是以后的方向,毕竟一个剑客也要对自己的剑了如指掌,才能在交战中取得胜利,才能够格参透更高深的剑意。其次是专业知识的广度也有所增长,了解到了很多新的专业方向,但是了解都很泛,明年一定要选其中的几个深入理解,只有看得招数多了,才能悟出自己的招数,就似独孤九剑,所谓无招胜有招不过就是临敌经验,以及对抓重点能力的锻炼。再次是对专业知识外的书籍的阅读,知晓了王阳明
 2018-01-02   其他    日常 

Maven的filtering和profile标签使用

使用Maven 将项目分版前言 每个项目通常都会用不同的配置文件对应不同的版本,例如开发版和上线版本的配置通常会是不同的。此时就会产生一个问题,当项目需要从开发版切换到上线版时,总是会避免不了更改很多配置项,或者切换配置文件,但是不管哪一种都不方便配置。使用Maven就可以很方便的帮助我们应对这种问题,本文就简单介绍一下使用方法。 resources属性 这个属性就是指定构建项目时需要将哪些配置文件打包,其本身包含很多子标签,这里就不一一介绍了,只介绍相关的。其中include就是指定需要包含在最终项目中的资源。 <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes>
 2017-12-02   编程    Maven 
1…4567

Search

Hexo Fluid
 总访问量 次   总访客数 人