当前位置: 首页 > news >正文

天河网站建设推广搜索引擎优化的意思

天河网站建设推广,搜索引擎优化的意思,西安做网站推广,淡水网站建设环形链表排列硬币合并两个有序数组(没错,出现过一次的LeetCode合并数组又双叒叕出现了!)经典算法题java解法 目录1 环形链表题目描述解题思路与代码解法一:哈希表解法二:双指针2 排列硬币题目描述解题思路与…

环形链表+排列硬币+合并两个有序数组(没错,出现过一次的LeetCode合并数组又双叒叕出现了!)经典算法题java解法

目录

  • 1 环形链表
    • 题目描述
    • 解题思路与代码
      • 解法一:哈希表
      • 解法二:双指针
  • 2 排列硬币
    • 题目描述
    • 解题思路与代码
      • 解法一:迭代
      • 解法二:二分查找
      • 解法三:牛顿迭代
  • 3 合并两个有序数组
    • 题目描述
    • 解题思路与代码
      • 解法一:合并后排序
      • 解法二:双指针
      • 解法三:双指针优化

1 环形链表

题目描述

给定一个链表,判断链表中是否有环。

如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达该节点,则链表中存在环;

如果链表中存在环,则返回 true 。 否则,返回 false 。

解题思路与代码

解法一:哈希表

    public static boolean hasCycle(ListNode head) {Set<ListNode> seen = new HashSet<ListNode>();while (head != null) {if (!seen.add(head)) {return true;}head = head.next;}return false;}

解法二:双指针

    public static boolean hasCycle2(ListNode head) {if (head == null || head.next == null) {return false;}ListNode slow = head;ListNode fast = head.next;while (slow != fast) {if (fast == null || fast.next == null) {return false;}slow = slow.next;fast = fast.next.next;}return true;}

2 排列硬币

题目描述

总共有 n 枚硬币,将它们摆成一个阶梯形状,第 k 行就必须正好有 k 枚硬币。
给定一个数字 n,找出可形成完整阶梯行的总行数。
n 是一个非负整数,并且在32位有符号整型的范围内

解题思路与代码

解法一:迭代

从第一行开始排列,排完一列、计算剩余硬币数,排第二列,直至剩余硬币数小于或等于行数

    public static int arrangeCoins(int n) {for(int i=1; i<=n; i++){n = n-i;if (n <= i){return i;}}return 0;}

解法二:二分查找

假设能排 n 行,计算 n 行需要多少硬币数,如果大于 n,则排 n/2行,再计算硬币数和 n 的大小关系

    public static int arrangeCoins2(int n) {int low = 0, high = n;while (low <= high) {long mid = (high - low) / 2 + low;long cost = ((mid + 1) * mid) / 2;if (cost == n) {return (int)mid;} else if (cost > n) {high = (int)mid - 1;} else {low = (int)mid + 1;}}return high;}

解法三:牛顿迭代

使用牛顿迭代求平方根,(x + n/x)/2

假设能排 x 行 则 1 + 2 + 3 + …+ x = n,即 x(x+1)/2 = n 推导出 x = 2n - x

    public static double sqrts(double x,int n){double res = (x + (2*n-x) / x) / 2;if (res == x) {return x;} else {return sqrts(res,n);}}

3 合并两个有序数组

题目描述

两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。

初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。假设 nums1 的空间大小等于 m + n,这样它就

有足够的空间保存来自 nums2 的元素。

解题思路与代码

解法一:合并后排序

    public void merge(int[] nums1, int m, int[] nums2, int n) {System.arraycopy(nums2, 0, nums1, m, n);Arrays.sort(nums1);}
  • 时间复杂度 : O((n+m)log(n+m))。
  • 空间复杂度 : O(1)。

解法二:双指针

从前往后

将两个数组按顺序进行比较,放入新的数组

    public void merge(int[] nums1, int m, int[] nums2, int n) {int [] nums1_copy = new int[m];System.arraycopy(nums1, 0, nums1_copy, 0, m);//拷贝数组1int p1 = 0;//指向数组1的拷贝int p2 = 0;//指向数组2int p = 0;//指向数组1//将数组1当成空数组,比较数组1的拷贝和数组2,将较小的放入空数组while ((p1 < m) && (p2 < n))nums1[p++] = (nums1_copy[p1] < nums2[p2]) ? nums1_copy[p1++] :nums2[p2++];//数组2和数组1不等长,将多出的元素拷贝if (p1 < m)System.arraycopy(nums1_copy, p1, nums1, p1 + p2, m + n - p1 - p2);if (p2 < n)System.arraycopy(nums2, p2, nums1, p1 + p2, m + n - p1 - p2);}
  • 时间复杂度 : O(n + m)。

  • 空间复杂度 : O(m)。

解法三:双指针优化

从后往前

    public void merge(int[] nums1, int m, int[] nums2, int n) {int p1 = m - 1;int p2 = n - 1;int p = m + n - 1;while ((p1 >= 0) && (p2 >= 0))nums1[p--] = (nums1[p1] < nums2[p2]) ? nums2[p2--] : nums1[p1--];System.arraycopy(nums2, 0, nums1, 0, p2 + 1);}
  • 时间复杂度 : O(n + m)。
  • 空间复杂度 : O(1)。
http://www.wooajung.com/news/30837.html

相关文章:

  • 如何限制国内用户访问只能访问我的中文网站seo文章外包
  • 制作一个有用户网站长沙百度百科
  • wordpress文件发送邮件厦门网站推广优化哪家好
  • 公司做网站需要什么资料短视频询盘获客系统
  • 淘宝网站如何做虚拟企业网站运营推广
  • 注册网站请签署意见是写无网站维护公司
  • wordpress仿qq空间模板seo快速排名首页
  • 网站运行及维护网络营销课程作业
  • 广州网站建设工作室如何做百度免费推广
  • asp网站开发实训网站竞价推广怎么做
  • 深圳福田做网站公司哪家好百度一下官网网址
  • 用dw做网站维护教程谷歌seo外链
  • 钓鱼网站开发html模板网站
  • php能建立网站吗网站怎么优化关键词快速提升排名
  • 网站建设及推广套餐苏州新闻今天最新消息新闻事件
  • 广东建设厅网站首页搜索引擎优化技术
  • 企业网站建设步骤免费网站推广网站短视频
  • 北京那家建网站好重庆森林电影完整版
  • 网站域名分几种安康seo
  • 静态网站怎么优化做网络推广需要多少钱
  • 微网站难做么软文推广营销平台
  • 宁德建设银行网站百度明星人气排行榜
  • 模板网站建设搜索引擎在线
  • 沭阳找做网站合伙南京市网站seo整站优化
  • 电商网站的在线客服怎么做百度注册网站
  • 织梦网站修改幻灯片经典品牌推广文案
  • 旅游网站 源码 织梦西安竞价托管代运营
  • 帝国网站管理系统安装连接不上数据库sem代运营托管公司
  • 淘宝联盟网站建设不完整国内b站不收费网站有哪些
  • 国内做香港视频网站网店代运营公司哪家好