精华内容
下载资源
问答
  • 在数组中查找小于60的数
    千次阅读
    2019-04-26 16:23:52

    题目描述

    在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

    时间限制:1秒 空间限制:32768K

    这道题的常规思路是进行行列依次遍历,但是会因为超时而不能通过。所以,不能强攻,只能智取。利用题目给出的条件

    class Solution {
    public:
        bool Find(int target, vector<vector<int> > array) {
            int rows = array.size();        //计算数组的行数
            int columns = array[0].size();  //计算数组的列数
            bool findit = false;            //定义布尔型变量代表是否找到
            if(rows > 0 && columns > 0)
            {
                int row = rows - 1;         //从数组的最后一行第一个元素开始
                int column = 0;
                while(row >= 0 && column < columns)
                {
                    if(target == array[row][column])//若等于要寻找的元素就结束
                    {
                        findit = true;
                        break;
                    }
                    else if(target > array[row][column])//若小于要寻找的元素则列数加一
                        ++column;
                    else                     //若大于要寻找的元素则行数减一
                        --row;
                }
            }
            return findit;
        }
    };

     

    更多相关内容
  • 将值(第二个参数)插入到数组(第一个参数),并返回其排序后的数组中的最低索引。返回的值应该是一个数字。 例如 getIndexToIns([1,2,3,4], 1.5) 应该返回 1,因为 1.5 大于 1(索引0),但小于 2(索引1)。 ...
  • java – 在数组中查找一个数字

    千次阅读 2021-03-08 10:51:30
    是的,当然可以O(n)时间完成.以下几种方法.第一个更有用的是找到所有候选单元格.进行单个O(n)通过数据设置每个单元格两个额外的项目,因此O(n)空间(一个非平凡数量的优化问题可以通过交易空间解决).您需要为每个...

    是的,当然可以在O(n)时间完成.以下几种方法.

    第一个更有用的是找到所有候选单元格.进行单个O(n)通过数据设置每个单元格两个额外的项目,因此O(n)空间(一个非平凡数量的优化问题可以通过交易空间解决).

    您需要为每个单元格计算的两个项目是左侧的最高值,右侧的最小值.第一遍为所有单元格设置这些项目,在没有意义的结尾处显示一个(伪代码):

    # Set current values.

    highLeftVal = cell[0]

    lowRightVal = cell[cell.lastIndex]

    # For running right and left through array.

    rightIdx = cell.lastIndex

    for each leftIdx 1 thru cell.lastIndex inclusive:

    # Left index done by loop, right one manually.

    rightIdx = rightIdx - 1

    # Store current values and update.

    highLeft[leftIdx] = highLeftVal

    if cell[leftIdx] > highLeftVal: highLeftVal = cell[leftIdx]

    lowRight[rightIdx] = lowRightVal

    if cell[rightIdx] < lowRightVal: lowRightVal = cell[rightIdx]

    那么这是一个简单的事情,检查每个单元格(第一个和最后一个),以确保该值都大于(这个答案假设,根据你的问题,“更高/更低”是文字,而不是“更大/小于或等于“)左侧最高,小于右侧最低点:

    for each idx 1 thru cell.lastIndex-1 inclusive:

    if cell[idx] > highLeft[idx] and cell[idx] < lowRight[idx]

    print "Found value ", cell[idx], " at index ", idx

    您可以看到以下初始通行的结果:

    highLeft: - 1 3 3 6 6 7 9 9 10 10

    cells : 1 3 2 6 5 7 9 8 10 8 11

    lowRight: 2 2 5 5 7 8 8 8 8 11 -

    ^

    值相对于其上下两个值排序(不包括)的唯一候选单元格是标有^的7.

    请记住,这是一个相对易于理解的解决方案,可以找到满足约束条件的多个项目.鉴于您只需要一个项目,可以获得更好的性能(尽管它仍然是O(n)).

    基本思想是从左到右遍历数组,对于每个单元格,您检查左侧的所有内容是否较低,右侧的所有内容都较高.

    第一位很容易,因为通过从左到右遍历,你可以记住遇到的最高价值.第二点似乎涉及未来的未来展望,但是有一个技巧可以避免这种“时间体操”.

    这个想法是保持当前单元格左侧看到的最高值和当前答案的索引(最初设置为哨兵值).

    如果当前的答案是哨兵值,则选择满足“大于左边的所有内容”的第一个单元格作为可能的答案.

    而且,只要是这样,那就是你选择的单元格.但是,一旦找到一个小于或等于右边的值,它就不再有效了,所以你丢弃它并重新开始搜索.

    这个搜索从现在开始就不会回来,因为:

    在当前答案之后,除了这个(较小或相等的)单元之外的所有内容都高于当前的答案,否则你已经找到了一个较小或相同的单元格;和

    因此,该小区必须小于或等于该范围内的每个小区,因为它小于或等于当前答案;因此

    >该范围内的单元格无效,它们都大于或等于此范围.

    一旦你完成非终端项目的处理,你的答案将是哨兵或一个几乎满足约束的单元格.

    我说“几乎”,因为有一个最后的检查需要确保最后的项目比它更大,因为你没有对该项目进行检查作为遍历的一部分.

    因此,这种野兽的伪代码就像:

    # Store max on left and start with sentinel.

    maxToLeft = cell[0]

    answer = -1

    for checking = 1 to cell.lastIndex-1 inclusive:

    switch on answer:

    # Save if currently sentinel and item valid.

    case -1:

    if cell[checking] > maxToLeft:

    answer = checking

    # Set back to sentinel if saved answer is now invalid.

    otherwise:

    if cell[answer] >= cell[checking]:

    answer = -1

    # Ensure we have updated max on left.

    if cell[checking] > maxToLeft:

    maxToLeft = cell[checking]

    # Final check against last cell.

    if answer != -1:

    if cell[cell.lastIndex] <= cell[answer]:

    answer = -1

    由于我的伪代码是(基于Python)的,它提供了一个更具体的代码行为示例是一件非常简单的事情.首先,“找到每一个可能性”选项:

    cell = [1, 3, 2, 6, 5, 7, 9, 8, 10, 8, 11]

    highLeft = [0] * len(cell)

    lowRight = [0] * len(cell)

    highLeftVal = cell[0]

    lowRightVal = cell[len(cell)-1]

    rightIdx = len(cell) - 1

    for leftIdx in range(1, len(cell)):

    rightIdx = rightIdx - 1

    highLeft[leftIdx] = highLeftVal

    if cell[leftIdx] > highLeftVal: highLeftVal = cell[leftIdx]

    lowRight[rightIdx] = lowRightVal

    if cell[rightIdx] < lowRightVal: lowRightVal = cell[rightIdx]

    print(highLeft)

    print(cell)

    print(lowRight)

    for idx in range(1, len(cell) - 1):

    if cell[idx] > highLeft[idx] and cell[idx] < lowRight[idx]:

    print("Found value", cell[idx], "at index", idx)

    而第二个,稍微有效的选择,但只能找到一种可能性:

    cell = [1, 3, 2, 6, 5, 7, 9, 8, 10, 8, 11]

    maxToLeft = cell[0]

    answer = -1

    for checking in range(1, len(cell) - 1):

    if answer == -1:

    if cell[checking] > maxToLeft:

    answer = checking

    else:

    if cell[answer] >=cell[checking]:

    answer = -1

    if cell[checking] > maxToLeft:

    maxToLeft = cell[checking]

    if answer != -1:

    if cell[len(cell] - 1] <= cell[answer]:

    answer = -1

    if answer == -1:

    print ("Not found")

    else:

    print("Found value", cell[answer], "at index", answer);

    print(highLeft)

    print(cell)

    print(lowRight)

    for idx in range(1, len(cell) - 1):

    if cell[idx] > highLeft[idx] and cell[idx] < lowRight[idx]:

    print("Found value", cell[idx], "at index", idx)

    两者的输出(尽管后面的例子只显示最后一行)基本上显示了伪代码是为了说明的:

    [0, 1, 3, 3, 6, 6, 7, 9, 9, 10, 10]

    [1, 3, 2, 6, 5, 7, 9, 8, 10, 8, 11]

    [2, 2, 5, 5, 7, 8, 8, 8, 8, 11, 0]

    Found value 7 at index 5

    展开全文
  • 有序数组中小于某个的个数

    千次阅读 2020-03-22 21:30:10
    一个有序的数组中查找小于某个的个数 [1, 2, 3, 4] 2 // 1 二分查找 let searchInsert = function (arr, x) { let left = 0; let right = arr.length - 1; while (left <= right) { let mid = (left ...

    在一个有序的数组中,查找小于某个数的个数

    [1, 2, 3, 4]
    2
    // 1
    
    

    二分查找

    let searchInsert = function (arr, x) {
      let left = 0;
      let right = arr.length - 1;
      while (left <= right) {
        let mid = (left + right) >> 1;
        if (arr[mid] === x) {
          return mid;
        } else if (x < arr[mid]) {
          right = mid - 1;
        } else {
          left = mid + 1;
        }
      }
    }
    
    let arr = [1, 2, 3]
    
    console.log(searchInsert(arr, 2))
    
    展开全文
  • 工作内容 项目需求 满5元,送1元,连续10天满5元,活动结束再送5元 满10元,送2元,连续10天满10元,活动结束再送10元 ... * @Description 数组中小于等于某个的所有数中的最大值 */ public static int g

    工作内容

    项目需求

    1. 需求:用户今天特定收入满足一定额度后,第二天发送相应额度的红包奖励。
    满5元,送1元,连续10天满5元,活动结束再送5元
    满10元,送2元,连续10天满10元,活动结束再送10元
    满20元,送4元,连续10天满20元,活动结束再送20元
    满30元,送5元,连续10天满30元,活动结束再送30元
    满50元,送10元,连续10天满30元,活动结束再送50元
    满100元,送20元,连续10天满100元,活动结束再送100元
    
    1. 方法:凌晨执行定时任务,批量查询所有用户收入,判断收入大于等于额度列表的最小值,即为奖励的红包。因为额度列表随时可配,长度不定,通过方法循环遍历来判断

    代码

    /** 
     * @Description 数组中小于等于某个数的所有数中的最大值
     */
    public static int getLtTargetMaxValueByArray(Integer[] arr, int target) {
        int defaultValue = target;// 默认原值
        for(int j = 0; j < arr.length; j++) {
          if(arr[j] < target) { // 小于基本值
            if(defaultValue < arr[j] || target == defaultValue){
              defaultValue = arr[j];
            }
          } else if (arr[j] == target) {
            return target;
          }
        }
        return defaultValue;
      }
    

    测试代码:

    自行选择不同的值进行测试

      public static void main(String[] args) {
        List<Integer> list = Arrays.stream(new Integer[]{5, 25, 20, 10, 30}).collect(Collectors.toList());
        System.out.println(getLtTargetMaxValueByList(list, 26));
      }
    
    
    展开全文
  • 问题描述:一个int数组,里面数据无任何限制,要求求出所有这样的a[i],其左边的小于等于它,右边的都大于等于它。能否只用一个额外数组和少量其它空间实现。  思路:如果能用两个辅助数组,那么相对来说...
  • 二维数组中查找一个

    千次阅读 2019-08-08 16:20:00
    一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 二分法...
  • C语言二维数组中查找的实例 题目描述:一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该...
  • 题目一:输一个递增排序的数组和一个数字 s,在数组中查找两个使得它们的 和正好是 s。如果有多对数字的和等于 s,输出任意一对即可。例如:输入数组 {1,2,4,7,11,15}和数字为 15.输出 4 和 11. 思路:不考虑...
  • 采用二分查找:如果数组中的数字小于下标,由于下标是-1的递减数列,但是数组中的元素差值大于等于-1,因此左边的不可能等于下标。如果数组中的数字大于下标,同理,之后的数字肯定都大于下标,往左边查找。 算法...
  • 主要介绍了Python实现查找数组中任意第k大的数字算法,涉及Python针对数组的排序、查找等相关操作技巧,需要的朋友可以参考下
  • 本文实例讲述了PHP实现二维数组中查找算法。分享给大家供大家参考,具体如下: 方法1:silu从左下角最后一行的第一个元素开始,遍历。如果小于target 则遍历该行的所有元素,找到结束。如果大于继续往上一行进行。...
  • 在数组中查找一个并返回其下标

    万次阅读 2018-07-13 18:58:27
    /** * 指定的数组中查找指定的元素并返回下标 * */public interface ThreadLookupAlgorithm {//线程查找public int find(int[] arr,int data);//二分查找public int findBinary(int[] arr,int left,int right,in...
  • [剑指Offer]-排序数组中查找数字

    千次阅读 2019-05-18 18:21:06
    统计一个数字排序数组中出现的次数。{1,2,3,3,3,3,4,5} 3出现了4次。 解题思路 当然可以无脑用哈希表或者直接遍历,空间复杂度O(n),时间复杂度O(1)代码略 优化:找第一个k时,首先也是二分找到中间的k...
  • 来源 | https://www.fly63.com前言有时候我们想以某种条件来查找一个数组中是否有满足改条件的元素,然后返回该元素,或者该元素的索引值。JavaScript 给我们提供了...
  • 给你一个数组nums,对于其中每个元素nums[i],请你统计数组中比它小的所有数字的数目。 换而言之,对于每个nums[i]你必须计算出有效的j的数量,其中 j 满足j != i 且 nums[j] < nums[i]。 以数组形式返回答案。...
  • js如何在数组中查找某个元素

    千次阅读 2020-12-29 08:48:21
    前言有时候我们想以某种条件来查找一个数组中是否有满足改条件的元素,然后返回该元素,或者该元素的索引值。Javascript 给我们提供了多种方法,主要分为按值查找和某种条件查找,下面开始介绍这些方法????。1. ...
  • js实现二维数组中查找目标算法

    千次阅读 2019-11-18 19:42:23
    一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 分析:...
  • 题目: 这样的数组中查找一个数字是否存在 要求:时间复杂度小于O(N) 数组: 1 2 3 1 3 4 1 2 3 2 3 4 2 4 5 4 5 6 3 4 5 4 5 6 7 8 9 解题思路: 什么是时间复杂度?通俗来讲就是哪种方法越简单,...
  • 在数组中查找指定元素

    千次阅读 2018-12-27 22:56:34
    在数组中查找指定元素。输入一个正整数n(1&lt;n&lt;=10),然后输入n个整数存入数组a。再输入一个整数x ,在数组a中查找x,如果找到则输出相应的下标,否则输出“Not found”。 输入 输出 样例输入 3...
  • 题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个,使得它们的和正好是输入的那个数字。 要求时间复杂度是 O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。例如输入数组 1、2、4、...
  • JavaScript 专题(九)数组中查找指定元素

    万次阅读 多人点赞 2020-11-12 18:05:23
    上一篇文章,我们了解了数组扁平化的思想,并学习了 lodash 是如何处理数组扁平化的。 这次我们来讨论**在数组中查找元素**时所用的一些方法,并且参考lodash来实现我们自己的工具方法
  • 该方法支持两个参数valueToFind,fromIndex(可选),第一个参数是‘需要查找的元素值’,第二个参数是‘从哪个索引处开始查找’,第二个参数如果为负数,则会按升序从 array.length + fromIndex 的索引开始查找...
  • 二分查找(Binary Search) 也叫折半查找, 是一种效率较高的查找方法 前提条件是被查找的元素首先要有序排列 ...1.如果这个大于目标数字, 说明要查找的目标整个区间的左半部分, 修改右侧区间为mid - 1, [l...
  • 主要介绍了C++二维数组中查找算法,结合实例形式分析了C++二维数组进行查找的原理与具体实现技巧,需要的朋友可以参考下
  • 设a[0:n-1]是一个已排好序的数组。请改写二分搜索算法,使得当搜索元素x不在数组中时,返回小于x的最大元素的位置I和大于x的最大元素位置j。
  • js在数组中查找对应id的对象

    千次阅读 2020-03-27 09:36:01
    初学js,需要在数组中获取对应id的项目信息,查找资料后,发现可以用es6的find()方法来实现,特以此来做记录。 一、find()简介 数组实例的find方法,用于找出第一个符合条件的数组成员。它的参数是一个回调函数...
  • 这个题的重点已经按照升序排序的一个数组对其进行操作,怎么样能够通过和来找到对应的两个数字,从头开始找和从尾开始找都会导致如果数字一边的话会导致不平衡,这样我们就从两边往中间找。下面是代码: void ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 212,517
精华内容 85,006
关键字:

在数组中查找小于60的数