数据结构与算法笔记(十四)定位问题

本文探讨了在解决计算机科学问题时如何定位问题,包括确定问题类型(如排序、查找、最优化),估算最低复杂度,选择合适的数据结构和算法。针对寻找数组中出现次数最多的问题,提出了两种方法:暴力的双循环方法(O(n²))和使用哈希表降低到O(n)的方法。此外,还讨论了寻找数组中相加等于目标值的两个数的双循环暴力方法(O(n²))和使用哈希表优化至O(n)的策略。
摘要由CSDN通过智能技术生成
  • 首先。明确目标
  • 然后。定位问题:
    • 问题的类型(排序、查找、最优化)
    • 问题可能的最低复杂度
    • 采用数据结构或算法

通用解题方法

  • 复杂度分析
  • 定位问题
  • 数据操作分析
  • 编码

寻找数组出现次数最多的问题

方法一:

最暴力的方法,双循环

第一层遍历所有元素

第二层计算每个元素的出现次数,比较当前元素出现次数和最大出现次数的大小

时间复杂度为O(n²)

方法二:

最低时间复杂度O(n),至少需要遍历一次全部元素

使用哈希表,key为元素,value为出现次数

循环一次原数组创建哈希表,查找哈希表,value最大的最为多出现次数,保存这个的key

给一个整数数组arr和一个目标值target,找出数组中相加等于目标值的两个数,返回他们的下标

假设数组中没有重复数字,只有一组答案

暴力方法:双循环,时间复杂度O(n²)

复杂度最低是O(n),数组是并非有序的,采用二分法的方式可能性低。

方法:哈希表,key对应数组元素,value对应index,查找时间复杂度为O(1)

for循环遍历数组生成哈希表,然后在哈希表中找出索引。也是两个循环

也可以使用一个循环

public class Solution {
    public int[] twoSum(int[] num
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值