209. 长度最小的子数组
题目点击前往
给定一个含有 n 个正整数的数组和一个正整数 target 。
找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。
示例 1:
123输入:target = 7, nums = [2,3,1,2,4,3]输出:2解释:子数组 [4,3] 是该条件下的长度最小的子数组。
示例 2:
12输入:target = 4, nums = [1,4,4]输出:1
示例 3:
12输入:target = 11, nums = [1,1,1,1,1,1,1,1]输出:0
解题思路暴力破解
两个for循环,然后不断的寻找符合条件的子序。
很明显暴力解法的时间复杂度是O(n + n\log n)。
123456789101112131415161718192021/** * @param {number} target * @param {number[]} nums * @return {n ...
977. 有序数组的平方
题目点击前往
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
示例 1:
1234输入:nums = [-4,-1,0,3,10]输出:[0,1,9,16,100]解释:平方后,数组变为 [16,1,0,9,100]排序后,数组变为 [0,1,9,16,100]
解题思路暴力破解
先求得平方,再利用快排进行排序。
很明显暴力解法的时间复杂度是O(n + n\log n)。
12345678/** * @param {number[]} nums * @return {number[]} */var sortedSquares = function(nums) { let result = nums.map(e=> Math.pow(e,2)); return result.sort((a,b) => a<b ? -1:1);};
双指针
双指针法:前后两个指针,将两个指针对应数平方进行比较,确定较大的一个将其置于结果数组同时 ...
27.移除元素
题目点击前往
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
解题思路暴力破解
利用两层for循环,一个for循环遍历数组元素 ,第二个for循环更新数组。
很明显暴力解法的时间复杂度是O(n^2)。
123456789101112131415161718/** * @param {number[]} nums * @param {number} val * @return {number} */var removeElement = function(nums, val) { let len = nums.length; for(let i =0;i<len;i++){ if(nums[i]==val){ for(let j=i+ ...
704.二分查找
题目给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
提示:
你可以假设 nums 中的所有元素是不重复的。
n 将在 [1, 10000]之间。
nums 的每个元素都将在 [-9999, 9999]之间。
代码1234567891011121314151617181920/** * @param {number[]} nums * @param {number} target * @return {number} */var search = function(nums, target) { let left = 0; let right = nums.length-1; while(left <= right){ let mid = Math.floor((left+right)/2); if(nums[mid] >t ...
算法学习笔记(二)二分查找
一、算法基础
使用前提:有序数组且数组中无重复元素。
二分查找涉及的很多的边界条件,逻辑比较简单,但就是写不好。
写二分法,区间的定义一般为两种,左闭右闭即[left, right],或者左闭右开即[left, right)。
二、算法框架12345678910111213141516function binarySearch(nums, target) { let left = 0, right = ...; while(...) { int mid = (right + left) / 2; if (nums[mid] == target) { ... } else if (nums[mid] < target) { left = ... } else if (nums[mid] > target) { right = ... }else ...
51. N 皇后
点击前往
题目n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。
给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。
每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。
解题思路
使用回溯算法。
Vue 学习笔记(七)模板语法
插值
双大括号的文本插值。
通过使用 v-once 指令,你也能执行一次性地插值,当数据改变时,插值处的内容不会更新。
12<span>Message: {{ msg }}</span><span v-once>这个将不会改变: {{ msg }}</span>
指令
指令(Directives)是带有 v- 前缀的特殊属性。
指令的职责:当表达式的值改变时,将其产生的连带影响,响应式地作用于 DOM。
参数
一些指令能够接收一个“参数”,在指令名称之后以冒号表示。
1<a v-on:click="doSomething">...</a>
动态参数1<a v-bind:[attributeName]="url"> ... </a>
用方括号括起来的 JavaScript 表达式作为一个指令的参数。
这里的 attributeName 会被作为一个 JavaScr ...
Vue 学习笔记(五)事件处理
事件处理监听事件
可以用 v-on 指令监听 DOM 事件,并在触发时运行一些 JavaScript 代码。
1234<div id="example-1"> <button v-on:click="counter += 1">Add 1</button> <p>The button above has been clicked {{ counter }} times.</p></div>
123456var example1 = new Vue({ el: '#example-1', data: { counter: 0 }})
事件处理方法
在method中创建事件处理方法,然后使用v-on 绑定对应方法名。
1234<div id="example-2"> <!-- `greet ...
Vue 学习笔记(六)表单输入绑定
表单输入绑定基础用法
可以用 v-model 指令在表单 <input>、<textarea> 及 <select> 元素上创建双向数据绑定。
v-model 本质上不过是语法糖。
它负责监听用户的输入事件以更新数据,并对一些极端场景进行一些特殊处理。
v-model 会忽略所有表单元素的 value、checked、selected attribute 的初始值而总是将 Vue 实例的数据作为数据来源。
v-model 在内部为不同的输入元素使用不同的 property 并抛出不同的事件:
text 和 textarea 元素使用 value property 和 input 事件;
checkbox 和 radio 使用 checked property 和 change 事件;
select 字段将 value 作为 prop 并将 change 作为事件。
修饰符.lazy
在默认情况下,v-model 在每次 input 事件触发后将输入框的值与数据进行同步。
可以添加 lazy 修饰符,从而转为在 change 事件_之后_进行同步 ...
Vue 学习笔记(四)列表渲染
列表渲染用v-for把一个数组对应为一组元素
可以用v-for指令基于一个数组来渲染一个列表。
v-for指令需要使用 item in items 形式的特殊语法;
items是源数据数组,item是被迭代数组的别名。
12345<ul id="example-1"> <li v-for="item in items" :key="item.message"> {{ item.message }} </li></ul>
123456789var example1 = new Vue({ el: '#example-1', data: { items: [ { message: 'Foo' }, { message: 'Bar' ...