1、排序数组(leetcode912)

尝试了一下希尔排序

class Solution {public int[] sortArray(int[] nums) {sher(nums);return nums;}public void sher(int []nums){int len = nums.length;for(int gap = len / 2 ; gap > 0 ; gap /=2){for(int i = gap ; i < len ; i ++){int temp = nums[i];int j;for( j = i ; j >= gap ; j -= gap){if(temp < nums[j - gap]){nums[j] = nums[j - gap];}else{break;}}nums[j] = temp;}}}
}

2、多数元素(leetcode169)

还是向往日一样重新敲了一遍,使用HashMap,更好的做法就是使用找出众数,就是大于n/2对应下标的数,因为你一个数出现的次数要大于n / 2 ,下标就是n / 2 的那个数。所以可以先排序(采用了希尔排序),然后找对应下标。

class Solution {public int majorityElement(int[] nums) {int len = nums.length;Map<Integer,Integer> map = new HashMap<>();for(int i = 0 ; i < len ; i ++){if(map.containsKey(nums[i])){int num1 = map.get(nums[i]);map.put(nums[i], ++num1);if(map.get(nums[i]) > len / 2)return nums[i];}else map.put(nums[i], 1);}return nums[0];}
}
class Solution {public int majorityElement(int[] nums) {sher(nums);return nums[nums.length / 2];}public void sher(int []nums){int len = nums.length;for(int gap = len / 2 ; gap > 0 ; gap /=2){for(int i = gap ; i < len ; i ++){int temp = nums[i];int j;for( j = i ; j >= gap ; j -= gap){if(temp < nums[j - gap]){nums[j] = nums[j - gap];}else{break;}}nums[j] = temp;}}}
}

3、存在重复元素(leetcode217)

可以使用哈希表记录,然后遍历哈希表看是否有大于等于2的元素。又或者可以使用排序,然后再遍历一遍看相邻元素是否相等。

class Solution {public boolean containsDuplicate(int[] nums) {Set<Integer> set = new HashSet<>();int len = nums.length;for(int i = 0 ; i < len ; i ++){if(set.contains(nums[i]))return true;else set.add(nums[i]);}return false;}
}

4、最大间距(leetcode164)

排序后遍历找出相邻元素的最大差值

class Solution {public  int maximumGap(int[] nums) {int len = nums.length, max = 0;if(len < 2)return 0;sher(nums);for(int i = 0, j = i + 1 ; i < len && j < len; i ++, j ++){int num = Math.abs(nums[i] - nums[j]);if(num > max )max = num;}return max;}public void sher(int []nums){int len = nums.length;int i,j,gap;for(gap = len / 2 ; gap > 0 ; gap /= 2){for( i = gap ; i < len ; i ++){int tem = nums[i];for( j = i ; j >= gap ; j -= gap){if(tem <= nums[j - gap])nums[j] = nums[j - gap];else{break;}}nums[j] = tem;}}}
}

5、按奇偶排序数组(leetcode905)

可以使用改进的快排,将奇数和偶数分边。

class Solution {public int[] sortArrayByParity(int[] nums){int len = nums.length;int l = -1 , r = len;while( l < r){do l ++;while(l < len && nums[l] % 2 == 0);do r --;while(r >= 0 && nums[r] % 2 != 0) ;if(l < r){int num = nums[l];nums[l] = nums[r];nums[r] = num;}}return nums;}
}

6、三角形的最大周长(leetcode976)

将数组排序,然后从后往前找三个数满足 a + b > c的,就直接有结果了,因为排序后,a + c >b , b + c > a这两个条件是肯定成立的,所以不用判断了。

class Solution {public int largestPerimeter(int[] nums) {int len = nums.length;sher(nums);// Arrays.sort(nums);int max = 0;for(int i = len - 1 ; i >= 0 ; i --){if(i - 1 >=0 && i -2 >= 0)if(nums[i - 1] + nums[i - 2] > nums[i])return nums[i - 1] + nums[i - 2] + nums[i];}return 0;}public void sher(int []nums){int len = nums.length;int i, j, gap;for(gap = len / 2 ; gap > 0 ; gap /= 2){for(i = gap ; i < len ; i ++){int tem = nums[i];for( j = i ; j >= gap ; j -= gap) {if (tem < nums[j - gap]) nums[j] = nums[j - gap];else break;}nums[j] = tem;}}}
}

(题解)《算法零基础100讲》(第38讲) 排序进阶 - 希尔排序相关推荐

  1. 【题解】《算法零基础100讲》(第44讲) 位运算 (位或) 入门

    文章目录 一. 概念定义 1.1 位或定义 1.2 位与定义 二. 推荐专栏 三. 相关练习 3.1 根据数字二进制下 1 的数目排序 3.2 二进制表示中质数个计算置位 3.3 2 的幂 一. 概念 ...

  2. 《算法零基础100讲》(第30讲) 概率与统计

    文章目录 零.写在前面 一.概念定义 二.题目描述 三.算法详解 四.源码剖析 五.推荐专栏 六.习题练习 零.写在前面   这是<算法零基础100讲> 专栏打卡学习的第 30 天了.如果 ...

  3. 《算法零基础100讲》(第42讲) 位运算 (位与) 入门

    文章目录 零.写在前面 一.概念定义 1.位与的定义 2.位与运算符的简单应用 1)奇偶性判定 2)取末五位 3)消除末尾五位 4)2的幂判定 二.题目描述 三.算法详解 四.源码剖析 五.推荐专栏 ...

  4. 【习题】《算法零基础100讲》位与 2

    前言 原文链接:<算法零基础100讲>(第43讲) 位运算 (位与) 进阶 习题 难度 习题 中等 397. 整数替换 中等 1404. 将二进制表示减到 1 的步骤数 中等 201. 数 ...

  5. 《算法零基础100讲》(第20讲) 进制转换(二) - 进阶

    文章目录 零.写在前面 一.概念定义 二.题目描述 三.算法详解 四.源码剖析 五.推荐专栏 六.习题练习 零.写在前面   这是<算法零基础100讲> 专栏打卡学习的第 20 天了.如果 ...

  6. 《算法零基础100讲》(第2讲) 数列

    文章目录 零.写在前面 一.概念定义 1.等差数列 2.等比数列 3.斐波那契数列 二.题目描述 三.算法详解 四.源码剖析 五.推荐专栏 六.习题练习 零.写在前面   这是<算法零基础100 ...

  7. 《算法零基础100讲》(第53讲) 区间问题(二) 区间的并集和交集

    文章目录 零.写在前面 一.概念定义 1.区间的相交判定 2.区间的交集 3.区间的并集 二.题目描述 三.算法详解 四.源码剖析 五.推荐专栏 六.习题练习 零.写在前面   这是<算法零基础 ...

  8. 《算法零基础100讲》(第11讲) 因子数

    文章目录 零.写在前面 一.概念定义 二.题目描述 三.算法详解 四.源码剖析 五.推荐专栏 六.习题练习 零.写在前面   这是<算法零基础100讲> 专栏打卡学习的第 11 天了.如果 ...

  9. 《算法零基础100讲》(第58讲) 前缀和(二) 线性前缀和变形

    文章目录 零.写在前面 一.概念定义 1.前缀积 2.前缀异或和 二.题目描述 1.定义 2.求解 三.算法详解 四.源码剖析 五.推荐专栏 六.习题练习 零.写在前面   这是<算法零基础10 ...

  10. 《算法零基础100讲》(第57讲) 前缀和(一) 线性前缀和入门

    文章目录 零.写在前面 一.概念定义 1.部分和 2.朴素做法 3.前缀和 4.前缀和的边界值 5.边界处理 6.再看部分和 二.题目描述 1.定义 2.求解 三.算法详解 四.源码剖析 五.推荐专栏 ...

最新文章

  1. sqlsourcesafe mysql_mysql权限问题,看不到其它的库!
  2. Android自定义动态壁纸,Android自定义动态壁纸开发详解
  3. 新手程序员如何让他快速成长?一名老程序员,谈谈对程序员的培养
  4. 计算机对中断的处理是在用户态下进行的,电大本科生作业系统作业3与答案.doc...
  5. Win7下的使用QTP进行猴子测试的性能日志实现方法
  6. 尾气冒黑烟是什么问题_老司机教你从尾气颜色就判断出爱车的“身体状况”
  7. 计算机基础教程2 - 计算机发展历程
  8. AM335X 3款核心板比较
  9. Mybatis-学习笔记(5)动态SQL
  10. ubuntu安装java虚拟机
  11. 这是我转载的一篇,真的是不错《把SWF变回FLA》大家可以试试
  12. pytorch(11)-- crnn 车牌端到端识别
  13. Java 枚举 ordinal 使用以及介绍
  14. EAN-13 条形码编程示例
  15. 大数据在高校的应用场景_大数据在高校教育信息化的应用
  16. OJ---腐烂的橘子
  17. [转]Android面试系列之一
  18. 定义一个矩形类Rectangle:(知识点:对象的创建和使用)
  19. 带例子的测试用例模板
  20. 中国菜刀使用教程--ctf 文件上传

热门文章

  1. 解决TypeError:Cannot read properties of undefined并深入解读TypeError错误类型
  2. ps中矫正镜头的一种方法
  3. python十个实战项目
  4. android 微信刷步数,微信QQ自动手动刷步数支持98800步安卓应用
  5. QGIS噱头笔记--(1)QGIS概要了解
  6. XP系统加入域提示无法找到网络路径处理方法
  7. IPGuard文档加密基本设置步骤
  8. R语言ggplot2可视化:使用ggpubr包的arrangeGrob函数将多个可视化结果整合为gtable对象、使用as_ggplot函数将gtable对象转化为ggplot对象
  9. XMind商业思维导图——市场营销!
  10. 自助式拍照打卡签到活动,亚运地点拍照打卡活动,<h2>JavaScript ISO