1.Two Sum

原题地址:https://leetcode.com/problems/two-sum/

Given an array of integers, return indices of the two numbers such that they add up to a specific target.

You may assume that each input would have exactly one solution.

Example:
Given nums = [2, 7, 11, 15], target = 9,

Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].

方法一

正常两次循环,循环次数可能多,只要数组不是很大,效率还是很高的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function(nums, target) {
console.time('twoSum')
for(var i=0;i<nums.length;i++){
for (var j = 0; j < nums.length&& i!=j; j++) {
if(nums[j]+nums[i]===target){
console.timeEnd('twoSum')
var result=[i,j].sort();
return result
}
};
}
};

方法二

边循环边使用对象存储

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var twoSum2 = function(nums, target) {
console.time('twoSum2')
var obj={};
for(var i=0;i<nums.length;i++){
if(obj[nums[i+'']]!==null && obj[nums[i+'']]!==undefined){
var result=[obj[nums[i]],i];
console.timeEnd('twoSum2')
return result;
}
obj[target-nums[i]]=i;
}
var result2=[];
return result2;
};

测试结果,建议使用更大的数组测试,才会看到twoSum2方法效率高

1
2
3
4
var nums = [2, 7, 11, 15], target = 9;
// var nums = [11, 15, 9,1,1,3,1,11, 15, 9,1,1,3,1,1,1,1,1,2,7,3], target = 9;
twoSum(nums,target);
twoSum2(nums,target);

经测试,在小数组时,twoSum方法twoSum2快很多,当数组变大时,twoSum2算法更快

如何组件化开发WebGIS系统

啰嗦两句

前面聊过《探讨如何使用流行的前端技术开发WebGIS系统》,本篇基于此继续介绍。

不用再讨论兼容IE6,7了,2017年,没人再用了。。。。哈哈哈

本人目前正业余开发一套框架,后端Java+前端Angular+个人封装的UI+个人封装的地图组件,东西很多,一个人搞,这是一个漫长的过程。这也是为什么最近再Github上如此活跃的原因,也因为最近一段时间没加过班。。。除了玩游戏就只能写代码了。。

=>giscafer (Nickbing Lao)

一、后端完善的Restful接口设计有利前端组件封装

比如知乎的文章链接

1
https://zhuanlan.zhihu.com/p/24780835

可以看作一个GET请求,接口p,参数为24780835。这个接口可以查所有文章。

做WebGIS系统,后端框架,接口设计好用,能提升前端开发的效率,并且可以针对接口封装一些增删改查的组件,在angular里边,你可以封装成指令或者是controller,然后其他业务controller集成此类,就继承了该类的所有方法了。比如应用里边我封装了增删改查的操作,只要是单表的CRUD(增查改删),完全不需要写多余的CRUD代码,只需要修改一下HTML和传参。如下代码可以改为一个通用的父类Controller。

继续阅读全文 »

代码理解React组件生命周期过程

生命周期

React Component整个生命周期分为三大块:初始化——存在期(更新)——销毁清理

首次实例化 调用方法

  • getDefaultProps()
  • getInitialState()
  • componentWillMount()
  • render()
  • componentDidMount()()

ES6写法中则为

  • constructor()
  • componentWillMount()
  • render()
  • componentDidMount()

存在期 调用方法

propsstate状态改变

  • componentWillReceiveProps()
  • shouldComponentUpdate()
  • componentWillUpdate()
  • render()
  • componentDidUpdate()

销毁清理 调用方法

  • componentWillUnmount()

继续阅读全文 »