Siyao's Blog


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 搜索

【leetcode】713.Subarray-Product-Less-Than-K.md

发表于 2017-10-26 | 分类于 leetcode
字数统计: 306 | 阅读时长 ≈ 1
题目Your are given an array of positive integers nums. Count and print the number of (contiguous) subarrays where the product of all the elements in the subarray is less than k. Example 1: Input: nums = [10, 5, 2, 6], k = 100Output: 8Explanation: The 8 subarrays that have product less than 100 are: [1 ...
阅读全文 »

【leetcode】 628. Maximum Product of Three Numbers

发表于 2017-08-01 | 分类于 leetcode
字数统计: 331 | 阅读时长 ≈ 2
题目Given an integer array, find three numbers whose product is maximum and output the maximum product. Example1:Input: [1,2,3]Output: 6 Example1:Input: [1,2,3,4]Output: 24 Note:The length of the given array will be in range [3,$10^4$] and all elements are in the range [-1000, 1000].Multiplication of ...
阅读全文 »

【leetcode】1. Two Sum

发表于 2017-08-01 | 分类于 leetcode
字数统计: 395 | 阅读时长 ≈ 2
题目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, and you may not use the same element twice. Example:Given nums = [2, 7, 11, 15], target = 9,Because nums[0] + nums[1] = 2 + 7 = ...
阅读全文 »

归并排序

发表于 2017-07-23 | 分类于 排序算法
字数统计: 303 | 阅读时长 ≈ 1
思路分治法将数组分成A、B两组,如果这二组组内的数据都是有序的,那么就可以很方便的将这二组数据进行排序。如何让这二组组内数据有序了? 可以将A,B组各自再分成二组。依次类推,当分出来的小组只有一个数据时,可以认为这个小组组内已经达到了有序,然后再合并相邻的二个小组就可以了。这样通过先递归的分解数列,再合并数列就完成了归并排序。 代码//将两个有序数组合并成一个有序数组void merge(int a[], int begin,int mid,int end,int b[]) { int i = begin; int j = mid + 1; int k = 0; ...
阅读全文 »

不使用中间变量交换两个数字

发表于 2017-07-22 | 分类于 算法
字数统计: 392 | 阅读时长 ≈ 2
给定两个数字a和b,要求不使用中间变量交换二者 一般做法一般的做法很简单 void swap(int &a;int &b){ int temp = a; a = b; b = temp;} 不使用中间变量的做法采用位操作符中的异或操作^ 操作符 功能 用法 ~ 取反 0变1,1变0 << 左移 后面补0 >> 右移 前面补0,后面吞位 & 位与 只有两个都为1,则为1。x&…00100…用于提取x某一位 ^ 位异或 只有一个为1,则为 1。用于判断两位是否相同 a^b^a = ...
阅读全文 »

选择排序

发表于 2017-07-22 | 分类于 排序算法
字数统计: 195 | 阅读时长 ≈ 1
思路每次从无序区选择一个最小的放大有序区的最后 设数组为a[0…n-1]。 初始时,数组全为无序区为a[0..n-1]。令i=0 在无序区a[i…n-1]中选取一个最小的元素,将其与a[i]交换。交换之后a[0…i]就形成了一个有序区。 i++并重复第二步直到i==n-1。排序完成。 代码//选择排序void SekectSort(int a[], int len) { for (int i = 0; i < len; i++) { int min = a[i]; int loc = i; //寻找最小的元素 ...
阅读全文 »

希尔排序

发表于 2017-07-22 | 分类于 排序算法
字数统计: 982 | 阅读时长 ≈ 4
思想希尔排序的实质是分组插入排序,又称缩小增量排序。 该方法的基本思想是: 先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的),对这些子序列分别进行直接插入排序 依次缩减增量再进行排序 待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。 因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率上比前两种方法有较大提高。 例子现在我们要将这样一个数组排序,一共有10个元素 第一次 增量 gap = 10/2 = 5 整个数组被分成了5个子数组,分别是[49,13],[38,27],[65,49] ...
阅读全文 »

插入排序

发表于 2017-07-20 | 分类于 排序算法
字数统计: 310 | 阅读时长 ≈ 1
思想直接插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止。 设数组为a[0…n-1]。 初始时,a[0]自成1个有序区,无序区为a[1..n-1]。令i=1 将a[i]并入当前的有序区a[0…i-1]中形成a[0…i]的有序区间。 i++并重复第二步直到i==n-1。排序完成。 在查找某元素应该插入到前面有序序列的位置时,我们可以采用边交换边插入的方式,直到无需交换 代码void InsertSort(int a[],int len) { for (int i ...
阅读全文 »

冒泡排序

发表于 2017-07-20 | 分类于 排序算法
字数统计: 702 | 阅读时长 ≈ 3
思想 依次比较相邻的两个数据,如果前面的比后面的大,就将其交换 这样交换一轮之后,整个序列中最大的就“沉”到了最后面的位置 重复上述过程,依次把第二大、第三大…的数字放到后面的位置。 代码void BubbleSort(int a[], int len) { for (int i = 0; i < len; i++) {//一共需要遍历len轮 for (int j = 0; j < len -1-i; j++) {//后面的len-1个数据 if (a[j] > a[j + 1]) { ...
阅读全文 »

快速排序

发表于 2017-07-17 | 分类于 排序算法
字数统计: 766 | 阅读时长 ≈ 3
感谢@MoreWindows的白话经典算法系列,浅显易懂,让我终于看懂了快速排序,总结一下 思想步骤: 从数列中选择一个作为基准数 分区操作:把比基准数小的都排在基准数的左边,比基准数大的都排在基准数的右边 对基准数的左边和右边分治排序 具体实现:挖坑填数+分治法这里结合个实际例子说明 根据上面的步骤,选取第一个作为基准数,接下来我们需要把比它小的数字放到它的左边,比它大的数字放到它的右边,这里就需要重点注意挖坑填数的方法了,划重点!!! temp=72 我们先把基准数72保存到变量temp中,这时候就相当于在数组的第一个位置上挖了一个“坑”,如果我们在后边发现有比temp小的数字, ...
阅读全文 »
1…789…12
Siyao

Siyao

siyao小朋友画圈圈的地方

120 日志
25 分类
32 标签
© 2017 — 2018 Siyao
由 Hexo 强力驱动
|
主题 — NexT.Pisces
| Site words total count: 222.8k
访问人次 次 总访问量 次